C語言 結構體與共用體(聯合體)

2021-09-29 01:47:36 字數 2288 閱讀 7700

一、結構體

1.結構體的宣告及定義:

(1)宣告乙個student的型別

struct  student

;struct student std1;

// 定義結構體變數std1

(2)用typedef 對結構體宣告

typedef

struct student

student;

student std1;

//定義結構體變數std1

2.結構體的初始化和成員訪問

(1)結構體初始化

struct student std1 =

;//初始化

student std1 =

;//初始化

(2)結構體的成員訪問

typedef

struct student

student;

intmain()

;//初始化

printf

("%s %d %s %s\n"

, std1.name, std1.age, std1.***, std1.id)

;//結構體訪問

system

("pause");

return0;

}

利用結構體指標訪問成員變數:

定義結構體指標指向定義的std1,通過指針對結構體成員進行訪問。

#define _crt_secure_no_warnings 1

#include

#include

//struct student

//;typedef

struct student

student;

intmain()

;//初始化

//printf("%s %d %s %s\n", std1.name, std1.age, std1.***, std1.id);

student* ps =

&std1;

printf

("%s %d %s %s\n"

, ps->name, ps->age, ps->***, ps->id)

;system

("pause");

return0;

}

3.結構體內存對齊

第乙個成員在與結構體變數偏移量為0的位址處。

其他成員變數要對齊到某個數字(對齊數)的整數倍的位址處。

對齊數 = 編譯器預設的乙個對齊數 與 該成員大小的較小值。

vs中預設的值為8

linux中的預設值為4

結構體總大小為最大對齊數(每個成員變數都有乙個對齊數)的整數倍。

如果巢狀了結構體的情況,巢狀的結構體對齊到自己的最大對齊數的整數倍處,結構體的整體大小就是所 有最大對齊數(含巢狀結構體的對齊數)的整數倍。

二、共用體(聯合體)

聯合也是一種特殊的自定義型別 這種型別定義的變數也包含一系列的成員,特徵是這些成員公用同一塊空間(所以 聯合也叫共用體)

(1)聯合體宣告及定義

union un

;//聯合變數的定義

union un un;

//計算連個變數的大小

printf

("%d\n"

,sizeof

(un)

);

從輸出的大小可以看出各個成員共用乙個記憶體空間

(2)聯合體應用舉例

判斷當前機器的大小端問題:

#define _crt_secure_no_warnings 1

#include

#include

intcheck_sys()

u; u.i =1;

return u.c;

}int

main()

(3)聯合大小的計算

聯合的大小至少是最大成員的大小。

當最大成員大小不是最大對齊數的整數倍的時候,就要對齊到最大對齊數的整數倍。

#define _crt_secure_no_warnings 1

#include

#include

union un1

;union un2

;int

main()

C 聯合體(共用體)

所佔的空間大小為成員中所佔空間最大的 union 聯合名 union a 使用該聯合體模板建立兩個變數a,b union a a,b union perdata a,b union a,b typedef int length length為int 型別的別名 length a,b a,b為int ...

C語言union 聯合體 共用體

一直以來,union都是個很少用到的東西,對於這些不常用的結構往往記不住。這次看書又看到了,還是學習一下吧。一般在windows api的一些資料結構中才能看到這個union,其實並不複雜。本質上來說和結構體是一樣的,但是從包裝的角度來看有差異。1 union中可以定義多個成員,union的大小由最...

C語言union 聯合體 共用體

一直以來,union都是個很少用到的東西,對於這些不常用的結構往往記不住。這次看書又看到了,還是學習一下吧。一般在windows api的一些資料結構中才能看到這個union,其實並不複雜。本質上來說和結構體是一樣的,但是從包裝的角度來看有差異。1 union中可以定義多個成員,union的大小由最...