指针问题和困惑

时间:2012-08-19 12:42:12

标签: c pointers null

这可能很简单,但让我感到困惑。

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;

2 个答案:

答案 0 :(得分:5)

q = p;

是。 q现在指向NULL,就像p一样。

&x = q;

不合法。您无法重新分配变量的地址。

*q = 7;

是,设置q指向的地址的内存7.如果q指向NULL,则会导致错误。

*q = &x;

不合法,q指向一个整数,因此您无法为其分配地址。这是合法的,因为int*隐含了一个强制转换({ {1}})&xint),但不是很安全。在C ++中,它只是一个普通的错误。你说的是*q(强制转换为x)的地址放在int指向的内存中。

答案 1 :(得分:2)

添加到彼得说明

*q=&x

这在*q=(int)&x变得合法。但是在32位操作系统上,写*q=(long)&x的好处。

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

x = NULL;
x将变为0;