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

Why is the structure showing less memory than actual memory in the following programming

我写了一个程序

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

the arithmetic is 18 bytes. why is the output like this?

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

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

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