我写了一个像这样的简单的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)); 


评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!