【发布时间】:2016-11-26 15:45:06
【问题描述】:
根据多个来源,指针p 在取消引用时指向一个值。因此,我们可以说一个指针包含一个地址作为它的值,当使用解引用运算符 (*) 时,返回 地址处的值。
指针可以被赋值如下:
int a = 90;
int *p = &a;
如果我们分配一个指针,它的值如下:
int *p;
*p = 60;
60 分配给p 并在取消引用时导致未定义的行为,因为 60 不是有效地址。 (根据the answer to this question)。
但是,对于以下代码:
int a = 90;
int *p = &a;
printf ("p is %d \n",*p);
printf ("a is %d \n", a);
printf ("address is %p \n",p);
*p = 100;
printf ("p is %d \n",*p);
printf ("a is %d \n", a);
printf ("address is %p \n",p);
收到以下输出:
p 是 90
a 是 90
地址是 0028FED8p 是 100
a 是 100 地址是 0028FED8
即,表达式*p = 100 更改a 的值,而不是p 包含的值。
如何 ??????
【问题讨论】:
-
*p = &a 完全错误,任何体面的编译器都会拒绝。
-
打印地址使用
%p,而不是%d -
是的,它被拒绝了。我在这个问题上打错字了。
标签: c pointers dereference