这个C代码中的指针发生了什么?

这个C代码中的指针发生了什么?,c,pointers,memory,memory-address,C,Pointers,Memory,Memory Address,问题-> #include<stdio.h> int main() { int a,*b,**c,***d; int x; a=&x; b=&a; c=&b; d=&c; printf("%d\t%d\t%d\t%d",a,b,c,d); a++; b++;

问题->

#include<stdio.h>
    int main()
    {
        int a,*b,**c,***d;
        int x;
        a=&x;
        b=&a;
        c=&b;
        d=&c;
        printf("%d\t%d\t%d\t%d",a,b,c,d);
        a++;
        b++;
        c++;
        d++;
        printf("\n%d\t%d\t%d\t%d",a,b,c,d);
        return 0;
    }

为什么在第二个指针之后,所有指针的值都会增加8?

如果选中,您会发现
sizeof(int)==4
sizeof(int*)==8
。打印指针时,可以看到实际值。增加指针会增加指针指向的对象的大小


您非常接近未定义的行为。如果你试图阅读这些指针指向的内容(或者更糟的是,写信给他们),结果可能非常糟糕。

评论不适用于扩展讨论;这段对话已经结束。
-760636132  -760636128  -760636120  -760636112

-760636128  -760636120  -760636112  -760636104