在c語言中,要定義一個復雜物件比如說一個學生,用普通的變數是不可能定義完成的,所以這就有了我們的結構體,結構體就是是用來說明一個復雜物件的,所以結構體大小計算也成了重點,那我們應該怎么去計算結構體的大小呢,下面直接超級詳細為你解答,
舉例一個結構體:struct st
{
char name;
int age;
double money;
}s;
結構體的大小計算有以下幾條規則:
1.結構體的第一個成員放在偏移量為0的位置如圖:

2.后面的變數放在對齊數整數倍上(對齊數一般是改成員變數大小如int為4),對齊數是編輯器默認對齊數與成員變數的大小取他們兩個的最小值(vs編輯器默認對齊數是8)

3,結構體最終大小是所有成員最大對齊數的整數倍16是8的整數倍,所以最終大小是16.
注意對于結構體套結構體中也是一樣的算,結構體對齊數就是該結構體成員中最大對齊數,總結構體大小為所有成員(包括套的結構體)對齊數的(最小的)整數倍,如結構體所以成員最大對齊數是4,結構體算出來的大小是17,所以最終結果是20,(注意:最終結構體大小>=算出來的結構體大小)如:
struct aa
{ char c;
struct st s;//上面計算過的大小為20
int i;
}d;如圖

計算得到的的大小是32,所有成員最大對齊數是8,32是8的整數倍,故該結構體大小為32.
最后,#pragma pack()可以修改默認對齊數,如#pragma pack(2),修改默認對齊數為2,

解釋:

以上就是計算結構體的全部內容了,覺得還可以的點個贊,覺得哪里不足的評論區留言,

這是我的牛客網,一開始是在牛客上寫的
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/297688.html
標籤:其他
上一篇:詳解linux中rsync的妙用
