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

问题描述

问题->

#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",d);
        return 0;
    }

输出

-760636132  -760636128  -760636120  -760636112

-760636128  -760636120  -760636112  -760636104

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

解决方法

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

您非常接近未定义的行为。如果您尝试读取这些指针指向的内容(或更糟糕的是,将它们写入),结果可能会很糟糕。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...