問題タブ [null-pointer]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - void ポインターとは何ですか? null ポインターとは何ですか?
そのため、いくつかのインタビューの質問を行っていたところ、 void および null ポインターに関する質問に出くわしました。
戻り値の型を持たないポインターは null ポインターと呼ばれます。任意の種類のデータ型にすることができます。
これは私を完全に混乱させました!この質問によれば、void と null は同じ意味で使用できるようですが、それが正しいとは思いません。void を戻り値の型、null を値と仮定しました。しかし、私はコードの新人にすぎず、自分が正しいかどうか確信が持てません。
nullポインタとvoidポインタとは何かについて、あなたの見解を述べてください。null と void の違いを探しているわけではありません。
c - Cでの明らかなNULLポインター逆参照は、実際にはポインター演算ですか?
私はこのコードを持っています。ここではnullポインターを逆参照しているように見えますが、結果をビット単位でAND演算しunsigned int
ます。私は本当に全体を理解していません。それは何をするつもりですか?これはポインタ演算の形式ですか?
私が得る出力は44です。しかし、それはどのように機能しますか?
c - memcpy(0,0,0) を実行しても安全であることが保証されていますか?
私はC標準に精通していないので、ご容赦ください。
memcpy(0,0,0)
安全であることが標準で保証されているかどうかを知りたいです。
私が見つけた唯一の制限は、メモリ領域が重複している場合、動作が未定義であることです...
しかし、ここでメモリ領域が重複していると考えてよいでしょうか?
c++ - コード内の初期化されていないポインター
私は C++ を学んでいますが、ポインタが初期化されていない場合、メモリ内のランダムな場所を指す可能性があり、メモリが他のプログラムによって使用される可能性があるという問題が発生する可能性があることを知りました。
その場合、コードのどの部分にもこの行を含めるべきではありません。
代わりに、次のようなものが必要です
int* ptr;
多くの本で最初の行( )を見たので、この疑問を抱いているので、提案してください。可能であれば、いくつかの例も挙げてください。
c++ - C ++スコープ終了後のポインタ参照の喪失
for
オブジェクトを保持する配列がクラスヘッダーで宣言されていても、スコープを離れた後、ループ中にポインターが指していたものにアクセスできないという、本当に奇妙なエラーが発生します。
これはコードの基本です:
Class CTile{ /*Code*/ };
誰が何が間違っているのか知っていますか?
c++ - C++ リンクリストの簡単な質問
特定のリンクリストにエンティティが存在するかどうかを確認しようとしています。これは私のコードです:
「問題行」としてマークした行から、ifステートメントの部分
エラー CXX0017 (シンボル "" が見つかりません) およびエラー CXX0030 (式を評価できません) が発生します。
このコードは、リンクリストにエンティティがない場合、つまりヘッドが null の場合に機能します。
Node コンストラクターは次のようになります。
私も次の行で試しました:
および Node コンストラクター
すべての組み合わせで同じエラーが返されます。助言がありますか?
c++ - null void* ポインターを削除するのは未定義の動作ですか?
delete
null ポインターを ing することは何もしないことを知っています。
いずれの場合も、delete のオペランドの値がヌル ポインターの場合、操作は無効になります。
(C++ 標準5.3.5 [expr.delete] p2
)
またvoid*
、 type のオブジェクトがないため、デストラクタを呼び出すことができないため、ポインタの削除は未定義の動作ですvoid
。
最初の選択肢 (
delete object
) では、delete のオペランドの値は、非配列オブジェクトへのポインター、またはそのようなオブジェクトの基本クラスを表すサブオブジェクトへのポインターでなければなりません。そうでない場合、動作は未定義です。
(C++ 標準5.3.5 [expr.delete] p2
)
さて、通常は最初にリストされたものは後でリストされたものよりも優先されると思いますvoid*
が、次のようなヌルポインターはどうですか?
c - ポインターが NULL ポインターかどうかを確認するにはどうすればよいですか?
私はいつも単純if(p != NULL){..}
に仕事をすると思っています。しかし、この Stack Overflow questionを読んだ後では、そうではないようです。
では、 NULL ポインターはゼロ以外の値を持つことができるという質問のすべての議論を吸収した後、NULL ポインターをチェックする標準的な方法は何ですか?
c++ - C++ 関数型プログラミング (boost::phoenix && boost::spirit) ポインター プレースホルダーの null-ptrs のテスト
したがって、私は次の精神カルマ ルール本体を持っています。
これにより、g ++からのかなり長いエラーメッセージが表示され、(役に立つ) で終わります:
これは有効な C++ です。
boost::phoenix::static_cast_<_r1_type *>(0)
整数に変換するだけでなく、試してみようと思いまし_r1_type
た(はい、それは間違っています。単なる実験でした)。
質問:
ポイントがゼロのときにルール本体の評価を防ぐために、スピリット eps コンストラクトを使用してプレースホルダーでポインター テストを実行するにはどうすればよいですか?
すべての「C++ 関数型プログラミング ライブラリの使用法」の質問と同様に、私は答えがぼんやりした感じになることを期待しています。
答え
Ildjam のポイントは、私の質問に直接答えます。私の問題には2つの問題がありました。上記の間接的な問題があります。そして、それは PEG の条件に関係しています。私が表現しようとしていることは、次のように書く必要があります。
文法の条件部分を表現するために、セマンティック アクション ボディ ([] ブロックで指定) を使用していました。不思議なことに、以前に条件付き PEG 文法を書いたことがありますが、間違いを犯したため、2 番目のクラスの問題が発生しました。
したがって、eps(_r1) はそのトリックを行います。2 番目のタイプのコンパイルの問題は、質問とは無関係です。
c++ - std::string が `0` から構築されることによるトラブルを防ぐにはどうすればよいですか?
コンパイラ (g++ 4.4) は明らかに として解釈0
し、 を呼び出しchar* NULL
て構築します。ポインターは c-string への有効なポインターではないため、これはもちろん役に立ちません。を呼び出そうとしても、この誤解は発生しません。これにより、コンパイル時にエラーが発生します。s
string::string(const char*, const Allocator &a = Allocator())
NULL
foo(1)
次のような関数を誤って呼び出したときに、コンパイル時にそのようなエラーまたは警告が発生する可能性はありますか?
でbar(0)
、 を忘れて、string
実際に持つ意味はi=0
?