我写了一个程序
include<stdio.h>
struct record
{
int i;
char ch[20];
};
int main()
{
struct record a,*b;
b=&a;
printf("intial pointer is %p and final is %p",b++,b);
return 0;
}
a的大小应为20 + 4 = 24,但输出为
intial pointer is 0x7fffb0455e40 and final is 0x7fffb0455e58
算术是18个字节。为什么输出会这样?
答案 0 :(得分:6)
算术是18个字节。输出为什么会这样?
因为它是十六进制。 0x7fffb0455e58
- 0x7fffb0455e40
为0x18
,或24 10 ,这是您期望的结果。
请注意,您的代码具有未定义的行为,因为++b
和b
在同一个表达式中使用,而没有序列点将它们分开。您还需要将为%p
准备的值转换为void*
,即
printf("initial pointer is %p and final is %p", (void*)b, (void*)(b+1));