为什么在下面的编程中结构显示的内存比实际内存少
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
-0x7fffb0455e40
是 0x18
,或 2410,这是您期望的结果。
请注意,您的代码具有未定义的行为,因为 ++b
和 b
在同一个表达式中使用,没有序列点分隔它们。您还需要将为 %p
准备的值转换为 void*
,即
printf("initial pointer is %p and final is %p", (void*)b, (void*)(b+1));
我写了一个程序
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
-0x7fffb0455e40
是 0x18
,或 2410,这是您期望的结果。
请注意,您的代码具有未定义的行为,因为 ++b
和 b
在同一个表达式中使用,没有序列点分隔它们。您还需要将为 %p
准备的值转换为 void*
,即
printf("initial pointer is %p and final is %p", (void*)b, (void*)(b+1));