我写了一个像这样的简单的c程序
#include<stdio.h>
void main()
{
int a=10;
int *p;int **q;
p=&a,q=&p;
printf("size of p %d\n",sizeof(p));
printf("%d\t%d\n",p,q);
printf("%d\t%d",++p,++q);
}
输出是这样的
size of p 8
55611340 55611320
55611344 55611328
如果我再次执行相同的二进制文件,我会变成这样
size of p 8
-385904884 -385904904
-385904880 -385904896
为什么输出第二次以相反的方式变化。 O/p 每次都随机反向变化。谁能告诉我为什么会发生这种情况
请您参考如下方法:
%d
格式说明符用于打印有符号整数,而不是指针。使用不正确的格式说明符会调用 undefined behavior .
要正确打印指针,请使用 %p
格式说明符并将有问题的指针强制转换为 void *
(向/从 强制转换的罕见时间之一void *
是必需的)。
printf("%p\t%p\n", (void *)p, (void *)q);
printf("%p\t%p", (void *)(++p), (void *)(++q));
此外,使用 %zu
格式说明符打印 size_t
(sizeof
运算符返回)。
printf("size of p %zu\n",sizeof(p));