我写了一个简单的结构程序。这是我编写的程序代码,用于打印结构中声明的变量的大小 -
#include<stdio.h>
main()
{
struct book
{char name[10];
int pages;
float price;
}b1={"Blue",500,200.00};
printf("The Address Of Name Is = %d ",&b1.name);
printf("\nThe Address Of Pages Is = %d",&b1.pages);
printf("\nThe Address Of Price Is = %d",&b1.price);
}
现在,当我编译程序并运行它时会出现问题。我将CHARACTER数组的大小打印为12个字节而不是10个字节。这是输出 -
blueelvis@Blueelvis:~$ ./a.out
The Address Of Name Is = 1264893904
The Address Of Pages Is = 1264893916
The Address Of Price Is = 1264893920
有人可以解释为什么会这样吗?另请注意,我在Linux环境中运行。
答案 0 :(得分:1)
这是因为Data Structure Alignment这意味着编译器将在类/结构中的变量之间插入填充,以确保下一个变量落在内存访问的最佳边界上。每种类型都有所不同。
这个答案中有一个完整的解释: Why isn't sizeof for a struct equal to the sum of sizeof of each member?
但是对于您的情况,整数的对齐方式为4
,因此它会将10
向上舍入为12
。即char[]
和int
之间有填充,以确保整数在4字节边界上开始。