【发布时间】:2019-01-19 06:07:27
【问题描述】:
我在下面的代码中给出了以下输入
12.5 12
b 13.5 13
c 14.5 14
#include <stdio.h>
int main(){
struct book
{
char name;
float price;
int pages;
};
struct book b1,b2,b3;
printf("enter name , price ,& no of pages\n");
scanf(" %c %f %d",&b1.name,&b1.price,&b1.pages);
scanf(" %c %f %d",&b2.name,&b2.price,&b2.pages);
scanf(" %c %f %d",&b3.name,&b3.price,&b3.pages);
printf("%c %d %f %d %d %d",b1.name,&b1.name,b1.price,&b1.price,b1.pages,&b1.pages);
printf("\n%c %d %f %d %d %d",b2.name,&b2.name,b2.price,&b2.price,b2.pages,&b2.pages);
printf("\n%c %d %f %d %d %d",b3.name,&b3.name,b3.price,&b3.price,b3.pages,&b3.pages);
printf("\n%d %d %d",sizeof(b1.name),sizeof(b1.price), sizeof(b1.pages));
}
我得到了以下输出
2686740 12.500000 2686744 12 2686748
b 2686728 13.500000 2686732 13 2686736
c 2686716 14.500000 2686720 14 2686724
1 4 4
现在我无法理解的是 b1.name(2686740) 和 b1.price(2686744) 的地址之间的差异是 4 其中 b1.name 是一个字符,所以差异应该是 1 并且相同在 b2 和 b3 中也重复。请帮忙!!!
【问题讨论】:
-
您偶然发现的称为“字节填充”。研究它,你会得到很好的文章来帮助你理解它。
-
好吧,我什至不知道填充是什么,所以我无法根据它进行搜索
-
这是您使用的编译器在结构中添加填充。
-
指针的正确格式说明符是 %p,而不是 %d。