取消引用递增的指针,使指针改变其值?

时间:2017-01-09 04:49:36

标签: c pointers dereference

#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。

1 个答案:

答案 0 :(得分:1)

您使用错误的控制字符串作为指针(mySQL

%i

您应该使用printf("%i\n",x);//10 ---->unexpected 代替

%p

对指针printf("%p\n",(void*) x); 的访问也会导致未定义的行为,因为初始指针(x + 1)指向一个整数,因此取消引用x超出绑定且未定义。