1

これは単純かもしれませんが、私を混乱させます。

int x;
int *p = NULL;
int *q = &x;

いつ何が起こるか

 q = p;   // Address where q points to equals NULL  .
 &x = q;  // I don't think this is possible  .
 *q = 7;  // Value of memory where q is pointing to is 7?  
 *q = &x  // That's just placing the address of x into memory where q points to right?  
 x = NULL;
4

2 に答える 2

5

q = p;

はい。qを指すNULLようになりpました。

&x = q;

合法ではありません。変数のアドレスを再割り当てすることはできません。

*q = 7;

はい、q が 7 を指しているアドレスのメモリを設定します。7 を指している場合qNULLエラーが発生します。

*q = &x;

正当ではありませんq。整数を指しているため、アドレスを割り当てることはできません。( ) からint*( &x) への暗黙のキャストがあるため、これは合法ですが、あまり安全ではありません。C++ では、単なるエラーです。のアドレスを( へのキャスト) を が指すメモリに配置すると言っているのは正しいです。int*qxintq

于 2012-08-19T12:47:05.447 に答える
2

ピーターの説明に追加

*q=&x

これは で有効になり*q=(int)&xます。ただし、32 ビット OS では書き込みが適切*q=(long)&xです。

Note:Some Compilers wont give you an error on  *q=&x

x = NULL;
x は 0 になります。

于 2012-08-19T12:52:59.310 に答える