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。如果q指向,NULL那么这将导致错误。

*q = &x;

不合法,q指向一个整数,所以你不能给它分配地址。这是合法的,因为存在从int*( &x) 到int( *q) 的隐式转换,但不是很安全。在 C++ 中,这只是一个简单的错误。您说得对,它将x(cast to an int) 的地址放入 . 指向的内存中q

于 2012-08-19T12:47:05.447 回答
2

添加到彼得斯的解释

*q=&x

这在*q=(int)&x.However 在 32 位操作系统上是合法的,写起来很好*q=(long)&x

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

x = NULL;
x 将变为 0;

于 2012-08-19T12:52:59.310 回答