#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语句将输出seg错误。在*(x + 1)= 10之后,x的值变为10。但是*(&amp; y + 1)的值确实变为10.语句*(x + 1)= 10不应该影响x imo。
答案 0 :(得分:1)
您使用错误的控制字符串作为指针(mySQL
)
%i
您应该使用printf("%i\n",x);//10 ---->unexpected
代替
%p
对指针printf("%p\n",(void*) x);
的访问也会导致未定义的行为,因为初始指针(x + 1)
指向一个整数,因此取消引用x
超出绑定且未定义。