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;
}
a的大小应为20 + 4 = 24,但输出为
intial pointer is 0x7fffb0455e40 and final is 0x7fffb0455e58
算术是18个字节.为什么输出是这样的?
算术是18个字节.为什么输出是这样的?
因为它是十六进制的.0x7fffb0455e58- 0x7fffb0455e40是0x18,或24 10,这是您期望的结果.
请注意,您的代码未定义的行为,因为++b和b在同一表达式中使用不带序列点把它们分开.您还需要投给准备的价值%p来void*,即
printf("initial pointer is %p and final is %p", (void*)b, (void*)(b+1));