主要是为了说明这种填充实际上是如何工作的,我对您的程序进行了一些修改。
#include<stdio.h>
struct a
{
int x;
char y;
int z;
};
int main()
{
struct a str;
str.x=2;
str.y='s';
str.z = 13;
printf ( "sizeof(int) = %lu\n", sizeof(int));
printf ( "sizeof(char) = %lu\n", sizeof(char));
printf ( "sizeof(str) = %lu\n", sizeof(str));
printf ( "address of str.x = %p\n", &str.x );
printf ( "address of str.y = %p\n", &str.y );
printf ( "address of str.z = %p\n", &str.z );
return 0;
}
请注意,我在结构中添加了第三个元素。当我运行这个程序时,我得到:
amrith@amrith-vbox:~/so$ ./padding
sizeof(int) = 4
sizeof(char) = 1
sizeof(str) = 12
address of str.x = 0x7fffc962e070
address of str.y = 0x7fffc962e074
address of str.z = 0x7fffc962e078
amrith@amrith-vbox:~/so$
下面突出显示了说明填充的部分。
address of str.y = 0x7fffc962e074
address of str.z = 0x7fffc962e078
虽然 y 只是一个字符,但请注意 z 是一个完整的 4 个字节。