C 为什么在下面的编程中,结构显示的内存比实际内存少
我写了一个程序C 为什么在下面的编程中,结构显示的内存比实际内存少,c,pointers,struct,sizeof,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; } 算法是18字节。为什么输出是这样的 算法是18字节。为什么输出是这样的 因为它是十六进制的0
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;
}
算法是18字节。为什么输出是这样的
算法是18字节。为什么输出是这样的
因为它是十六进制的0x7fffb0455e58
-0x7fffb0455e40
是0x18
,或2410,这是您期望的结果
请注意,您的代码具有未定义的行为,因为++b
和b
在同一表达式中使用,没有将它们分隔开的序列点。您还需要将为%p
准备的值转换为void*
,即
printf("initial pointer is %p and final is %p", (void*)b, (void*)(b+1));
算法是18字节。为什么输出是这样的
因为它是十六进制的0x7fffb0455e58
-0x7fffb0455e40
是0x18
,或2410,这是您期望的结果
请注意,您的代码具有未定义的行为,因为++b
和b
在同一表达式中使用,没有将它们分隔开的序列点。您还需要将为%p
准备的值转换为void*
,即
printf("initial pointer is %p and final is %p", (void*)b, (void*)(b+1));
它不是18个字节。它是1*16+8=24字节。我投票以主题外的形式结束这个问题,因为它是关于读取十六进制数字的。
0x7fffb0455e58-0x7fffb0455e40==0x18
它不是18字节。它是1*16+8=24字节。我投票结束这个问题,因为它是关于读取十六进制数字的。0x7fffb0455e58-0x7fffb0455e40==0x18