【发布时间】:2017-01-09 04:49:35
【问题描述】:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int *x= 0;
int y = 0;
x = &y;
*x = 1;
printf("%i\n",x);//an address
printf("%i\n",*x);//1
*(x+1)=10;
printf("%i\n",x);//10 ---->unexpected
printf("%i\n",x+1);//14 ---->more wierd
printf("%i\n",*(x+1));//seg fault
return 0;
}
在这种情况下,最后一个 printf 语句将输出一个段错误。 *(x+1)=10 后 x 的值变为 10。但是 *(&y+1) 的值确实更改为 10。语句 *(x+1)=10 不应该影响 x imo。
【问题讨论】:
-
您应该使用
%p说明符打印地址,并且在执行此操作时必须将指针转换为(void *)。但是,*(x + 1) = 10调用未定义的行为。在那之后,你的程序就不再重要了。 -
你觉得
*(x+1) = 10;应该怎么做?你为什么这么认为?
标签: c pointers dereference