为什么结构在以下编程中显示的内存少于实际内存

时间:2015-03-15 08:18:25

标签: c pointers struct sizeof

我写了一个程序

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个字节。为什么输出会这样?

1 个答案:

答案 0 :(得分:6)

  

算术是18个字节。输出为什么会这样?

因为它是十六进制。 0x7fffb0455e58 - 0x7fffb0455e400x18,或24 10 ,这是您期望的结果。

请注意,您的代码具有未定义的行为,因为++bb在同一个表达式中使用,而没有序列点将它们分开。您还需要将为%p准备的值转换为void*,即

printf("initial pointer is %p and final is %p", (void*)b, (void*)(b+1));