2016-10-28 5 views
1

私がやるのであれば:printfでヌルポインタを出力すると(nil)が出力されますが、&ptrはアドレスを出力します。どうして?

int *ptr = NULL: 

printf("%p", ptr); 

私は(ゼロ)は、プリントアウトを得ます。これはポインタのアドレスを出力していますか?ポインタはヌルポインタを指します。

が、私がしなければ:

int *ptr = NULL; 

printf("%p", &ptr); 

私はメモリアドレスを取得します。どうしてこれなの?それは、実際のNULLメモリの場所がどこにあるのかを示すためですか?この場所は常に変化しますか? 2番目のコードを使用するたびに、私は別のメモリアドレスを取得し続けます。ポインタptrに格納されている

+2

'int ptr = NULL'はポインタではありません。これは整数です。 –

+0

@RishikeshRaje申し訳ありません! *を忘れてしまった。ありがとう! – MoMoe0

+1

'%p'でヌルポインタを出力するときに、' printf() 'のどの変種に'(nil) 'が与えられますか? –

答えて

4

NULL又は0です。

ただし、ptrは変数です。いくつかのメモリ位置に格納されます。したがって、&ptrを取ると、ptrが格納されているメモリ位置が得られます。

+0

したがって、 '%pは'&ptr'を持っていなければ 'ptr'の値を表示します。 'ptr'がnullの場合にのみこれを行いますか? – MoMoe0

+3

'printf("%p "、ptr);' ptrに値を出力します。 'ptr'の値は何でも。例えばあなたは 'int a;を行うことができます。 ptr =&a; 'そして' printf( "%p"、ptr) 'を実行します。そこに価値が得られます。 –

+0

同じ状況では、 'printf("%p "、ptr);'を実行すると '0x7ffdf4d5c054'のようなアドレスが得られ、' printf( "%p"、&ptr); 'it '0x7ffdf4d5c058'の次のアドレスを与えます。最初のものはその中の変数のアドレスを持ち、もう一つはポインタ自体の実際のアドレスですか? – MoMoe0

関連する問題