C語言複習(3) 結構體共用體

2021-09-25 13:20:59 字數 704 閱讀 9398

結構體的主要問題在於,結構體的大小,因為結構體需要記憶體對齊

共用體的主要問題在於,共用體 共用低位址,所以共用體的大小取決於最大的的元素位元組數

一、結構體大小的計算

struct a

;

本來應該是1+4=5,對齊之後是char(1位元組)+int(4位元組)是需要補齊三位元組,以保證struct的位元組數可以整除最大元素的位元組數,所以a的位元組計算為(1+3)+4 = 8

struct b

;

b:(1+1)+2+4 = 8

struct c

;

c:4+(3+1) = 8

空結構體,在win平台下是不允許*.c檔案定義空結構體的,在linux下可以定義,位元組大小為0

二、共用體

union x

;

共用體的位元組大小計算,取最大元素,x中最大元素為short(2位元組),所以x的大小為2位元組

因為共用低位址,所以就可以利用這個特點寫乙個判斷大小端的函式

//判斷當前係數是否為小端

bool islittle()

在小端中short在記憶體中以0x 34 12形式儲存,a只有1位元組使用0x34,所以可以根據低位址是否為理想資料來判斷大小端

c語言複習 結構體和共用體

注 本文是對蘇小紅版c語言程式設計第12章的筆記 結構體的定義 結構體的宣告 主要目的 用已有的資料型別定義乙個新的資料型別 struct 結構體名 結構體名成為結構體標籤 e.g.struct student 注意,結構體模板只是宣告了一種資料型別,並未宣告結構體型別的變數 結構體變數的定義 方法...

C 結構體共用體

12 c 中陣列初始化的特點 初始話陣列可以省略等號 初始話內容為空 不可縮窄操作 double people double people int number 不通過,因為浮點到整形為縮窄13 sizeof 計算陣列時候會比strlen 多計算乙個0位元組 14 字串的初始化和賦值,string ...

C語言陣列結構體共用體雜記

一維陣列 a i a i 多維陣列 以此類推 5.陣列名是常量,不能被賦值改變!6.在陣列初始化中,如果給部分位置初始化賦值,其它位置自動置為0 7.在字元型陣列中,printf不能列印帶有空格的字串 8.與字元陣列有關的函式 strlen 計算字串個數,但不包括 0 用sizeof來計算的話是包括...