在编译字符数据类型后获取结构的错误大小

时间:2013-12-10 17:25:48

标签: c gcc

我写了一个简单的结构程序。这是我编写的程序代码,用于打印结构中声明的变量的大小 -

#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环境中运行。

1 个答案:

答案 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字节边界上开始。