2017-02-08 10 views
0

なぜ値のNULLポインタのアドレスが異なる 私はNULLポインタの概念を理解しようとしています。ここでは& qは異なるアドレスを出力し、 'q'は0を返します。これが理由です。C++のNULLポインタ

#include <iostream> 
using namespace std; 
int main() 
{ 

int *q=NULL; 

cout <<"adress of pointer q\n" << q<<endl; 
cout <<"adress with apersand pointer q\n" << &q<<endl; 

} 

答えて

1

NULLポインタは、iostreamを含むいくつかの標準ライブラリで定義された値が0の定数です。

ほとんどのオペレーティングシステムでは、オペレーティングシステムによってメモリが予約されているため、プログラムはアドレス0のメモリにアクセスできません。ただし、メモリアドレス0には特別な意味があります。それはポインタがアクセス可能なメモリ位置を指すことを意図していないことを示す。しかし、慣例により、ポインタがヌル(ゼロ)値を含んでいれば、何も指していないものとみなされます。

参考文献は参考文献ではありません。

参照は、有効なオブジェクトまたは 機能を参照するように初期化する必要があります。 [注:特に、NULL参照は、 の定義済みプログラムには存在しません。そのような参照 を作成する唯一の方法は、NULL ポインタを逆参照して取得した「オブジェクト」にバインドすることです。動作。 9.6で説明したように、 の参照は、ビットフィールドに直接バインドすることはできません。 ]

ヌルポインタは、「有効なオブジェクトまたは機能」を指していないことが確かであり、ヌル参照を導入することは標準委員会内には望んでいません。

+0

&qとqが同じでない理由は何ですか?アドレスが0だった場合、&iはなぜmemeoryアドレスを取得するのですか?上記の – Step

+0

私はなぜnullpointer qの印刷値0を説明します。アドレスはゼロではないので、&qはメモリの場所を表示します。 – Aryan

0

qをNULLに初期化したので、qが0になります。 しかし、変数qはどこかに格納されます。アドレスは& qです。