这段 C 代码中的指针发生了什么?
What is happening with the pointer in this C code?
问题->
#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;
}
输出
-760636132 -760636128 -760636120 -760636112
-760636128 -760636120 -760636112 -760636104
为什么在第 2 个指针之后所有指针都递增 8?
如果您检查过,您会发现 sizeof(int) == 4
和 sizeof(int*) == 8
。当您打印指针时,您会看到实际值。增加指针会增加指针指向的大小。
您非常接近未定义的行为。如果您试图读取这些指针指向的内容(或者更糟的是,写入它们),结果可能会非常糟糕。
问题->
#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;
}
输出
-760636132 -760636128 -760636120 -760636112
-760636128 -760636120 -760636112 -760636104
为什么在第 2 个指针之后所有指针都递增 8?
如果您检查过,您会发现 sizeof(int) == 4
和 sizeof(int*) == 8
。当您打印指针时,您会看到实际值。增加指针会增加指针指向的大小。
您非常接近未定义的行为。如果您试图读取这些指针指向的内容(或者更糟的是,写入它们),结果可能会非常糟糕。