这可能很简单,但让我感到困惑。
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;
答案 0 :(得分:5)
q = p;
是。 q
现在指向NULL
,就像p
一样。
&x = q;
不合法。您无法重新分配变量的地址。
*q = 7;
是,设置q指向的地址的内存7.如果q
指向NULL
,则会导致错误。
*q = &x;
不合法,这是合法的,因为q
指向一个整数,因此您无法为其分配地址。int*
隐含了一个强制转换({ {1}})&x
(int
),但不是很安全。在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;