0

私は質問への回答を投稿していました - そして、金属という名前の別のポスターのおかげで、それが私に起こったとコメントしました

C++ コンパイラはこれを許可しました:

int *p = 0;しかし、これではありませんint *p = 10特別な番号と見なされますか?

編集:@DavidHeffermanは言ったIs 0 special? In the context of a pointer, yes it is.-なぜですか?

4

3 に答える 3

6

標準のセクション 4.10、ポインター変換 [conv.ptr] は次のように述べています。

null ポインター定数は、0 に評価される整数型の整数定数式 (5.19) prvalue、または型 std::nullptr_t の prvalue です。null ポインター定数はポインター型に変換できます。結果はその型の null ポインター値であり、オブジェクトへのポインターまたは関数型へのポインターの他のすべての値と区別できます。このような変換をヌルポインタ変換と呼びます。同じ型の 2 つのヌル ポインター値は、比較すると等しくなります。null ポインター定数から cv 修飾型へのポインターへの変換は単一の変換であり、ポインター変換とそれに続く修飾変換 (4.4) のシーケンスではありません。整数型の null ポインター定数は、std::nullptr_t 型の prvalue に変換できます。

はい、0ポインターのコンテキストでは特別な値です。

于 2013-03-21T14:31:38.730 に答える
1

0 は NULL、1 は無効なアドレスです。

于 2013-03-21T14:26:48.273 に答える
1

「ヌルポインター定数は、ゼロに評価される整数定数式です (0 や 0L など)。」

http://www.cplusplus.com/reference/cstring/NULL/を参照してください。

于 2013-03-21T14:29:48.623 に答える