初學結構體的知識總結

2021-09-01 16:08:49 字數 1444 閱讀 4490

struct student

stu1,stu2,stu3;

int main()

匿名結構體

struct

stu1;

struct

*ps;

int main()

struct node

;int main()

typedef struct node

node;

int main()

#include//offsetof的標頭檔案

struct s1

;//struct s2

//;struct s3

;struct s4

;int main()

; //rintf("%d\n", offsetof(struct s2, c1));//0 offsetof代表 相對於起始位置的偏移量

//printf("%d\n", offsetof(struct s2, c2));//1

//printf("%d\n", offsetof(struct s2, i));//4

//struct s1 s1 = ;

//struct s2 s2 = ;

//printf("%d\n", sizeof(struct s1));//12 //兩種列印方式都一樣

//printf("%d\n", sizeof(s1));

//printf("%d\n", sizeof(struct s2));//8

//printf("%d\n", sizeof(s2));

system("pause");

return 0;

}

結構體內存對齊的規則 要牢牢掌握

1.第乙個成員永遠都放在結構體起始位置的0偏移處

2.從第二個成員開始,每個成員都放在某個對齊數的整數倍的偏移處

這個對齊數:成員自身的大小和預設對齊數的較小值

預設對齊數:

vs環境下:8 linux gcc:4

3.結構體的總大小必須是所有成員對齊數中最大對齊數的整數倍

4.如果結構體中巢狀結構體,

巢狀結構體要對齊到自身最大對齊數的整數倍,

結構體的總大小是所有對齊數(包含巢狀結構的對齊數)中最大對齊數的整數倍

對其原因:提高效率

節省空間的方法:把小的放在一起

#pragma pack(4)//將預設對齊數改為4

struct s

;#pragma pack()//沒寫數字代表修改取消

int main()

//#pragma pack(1) 代表沒有對齊,0偏移量

結構體傳參(傳位址)(傳結構體)

結構體知識總結

struct b關於結構體,我們一定不會陌生,結構體可以說和類的用法類似,但是也有不同之處,總的來說,結構體的使用使我們可以更加方便的儲存和使用資料。我在上面就定義了乙個結構體,裡面有兩個元素,乙個是int型別的,乙個是char型別的,因此,結構體裡面可以放進去不同型別的資料,這跟結構體的空間開闢有...

結構體相關知識總結

結構體傳參 1.結構體的簡單認識 struct s int main 這是乙個最簡單的結構體傳參,先定義結構體 struct s 然後在主函式中賦值,列印。2結構體進行傳參 傳值和傳址的區別 以下有幾種不同的情況 一.struct s void init struct s tmp intmain i...

結構體知識點總結

對於結構體的知識點,我主要分為以下幾點來講解 結構體的宣告 結構體型別的建立 結構體成員的訪問 結構體的初始化 結構體內存對齊 位段。1.結構體的宣告 struct stu 分號不能丟2.結構體型別的建立 有兩種建立的方法,第一種 struct stu struct stu s1 定義了乙個結構體變...