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

kap*_*pil 0 c struct pointers 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;
}
Run Code Online (Sandbox Code Playgroud)

a的大小应为20 + 4 = 24,但输出为

intial pointer is 0x7fffb0455e40 and final is 0x7fffb0455e58
Run Code Online (Sandbox Code Playgroud)

算术是18个字节.为什么输出是这样的?

das*_*ght 6

算术是18个字节.为什么输出是这样的?

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

请注意,您的代码未定义的行为,因为++bb在同一表达式中使用不带序列点把它们分开.您还需要投给准备的价值%pvoid*,即

printf("initial pointer is %p and final is %p", (void*)b, (void*)(b+1));
Run Code Online (Sandbox Code Playgroud)