struct結構體實際佔用位元組
原則1. 各成員變數的偏移量必須為該成員大小的整數倍,如不夠則在上一個變數後填充位元組數
struct student
{
char name;
int id;
double score;
};
name 偏移量為0,成員大小為1,直接存;
id偏移量為1,成員大小為4,需要在前面補充3個位元組;
score偏移量為8,成員大小為8,直接存;
所以sizeof(student)==16
原則2. 在所有成員計算以後,結構體的總大小—必須為成員變數中最寬型別的整數倍,如不夠則在最後的變數後填充位元組數
struct teacher
{
char name;
short age;
double salary;
int id;
};
name 偏移量為0,成員大小為1,直接存;
age 偏移量為1,成員大小為2,需要在前面補充1個位元組;
salary 偏移量為4,成員大小為8,需要在前面補充4個位元組;
id 偏移量為16,成員大小為4,位元組儲存;
sizeof(student)==20,但20不是double型別的整數倍,後面補充4個位元組
所以 sizeof(student)==24
原則3. 複合型變數的偏移量必須為 該變數中最寬資料型別大小 的整數倍;
struct A
{
char v1; 1位元組,後補7位元組
double v2; 8位元組
}; // 16位元組
struct B
{
int v1; 4位元組,後補4位元組(因為struct A 最寬型別為8位元組)
struct A v2; 16位元組
char v3; 偏移量24,自接存
};
sizeof(struct B)==25, 但25不是 struct A 最寬型別為8位元組 的整數倍,所以後補7位元組
所以sizeof(struct B)==32.