今日學習任務
回顧指標內容,學習結構體,位域,共用體,鍊錶
今日任務完成情況
鍊錶的建立
今日未解決問題
鍊錶的具體操作
今日開發收穫
函式指標的具體內容。
結構體內存對齊問題:
1. 平台原因(移植問題):
不是所有的硬體平台都能訪問任意位址上的任意資料的;某些硬體平台只能在某些位址處取某些特定型別的資料,否則丟擲硬體異常。
2. 效能原因:
資料結構(尤其是棧)應該盡可能地在自然邊界上對齊。原因是,為了訪問未對齊的記憶體,處理器需要作兩次記憶體訪問;而對齊的記憶體訪問僅需要一次訪問。
總結:結構體的記憶體對齊是拿空間來換時間的做法;
結構體的對齊規則:
1. 第乙個成員在與結構體變數偏移量為0的位址處。
2. 其他成員變數要對齊到某個數字(對齊數)的整數倍的位址處。對齊數 = 編譯器預設的乙個對齊數與該成員大小的較小值。 注:vs中預設的值為8,linux中預設值為4
3. 結構體總大小為最大對齊數(每個成員變數除了第乙個成員都有乙個對齊數)的整數倍。
4.如果巢狀了結構體的情況,巢狀的結構體對齊到自己的最大對齊數的整數倍處,結構體的整數大小就是所有最大對齊數(含巢狀結構體的對齊數)的整數倍。
位域\位段:
把乙個位元組中的二進位制位劃分成幾個不同的區域,並定義每個區域的位數。
定義:struct data
意義:有些資訊的儲存不需要乙個位元組,比如性別,可以用0表示女,1表示男,用乙個二進位制位就夠了。
注意事項:
1)1個位域必須在乙個位元組內,不能跨兩個位元組
2)位域占用的位數不能超過乙個位元組
3)允許無名位域用來佔位。
共用體:
不同資料型別的資料可以使用共同的儲存區域,這種資料構造型別稱為共用體
union gya;
共用體變數在儲存時總是按其成員中資料長度最大的成員占用記憶體空間.
在共用體型別變數中起作用的成員是最後一次存放的成員,在存入乙個新的成員後原有的成員就失去作用.
a.i = 1; a.c = 』a』; a.f = 1.5; 完成以上三個賦值運算以後,a.f是有效的,a.i和a.c已經無意義了。
在程式中經常使用結構體與共用體相互巢狀的形式。 即共用體型別的成員可以是結構體型別,或者結構體型別的 成員是共用體型別。
單鏈表的使用。
自我評價
對於鍊錶的使用還不太能完全掌握
其他
蘇嵌嵌入式Linux實訓第五天
今天講的依舊是有關c語言方面知識,在這裡老師特意強調了編碼的揮發性。規範性,這是以前c語言學習之中沒有提到過的。按照一定規則編寫 會增加編者與使用者的可讀性,便於理解。用通俗易懂的話來講指標也就是乙個變數,且這個變數的值是記憶體的乙個位址。指標的大小都是相同的,有int,char,void型別。陣列...
蘇嵌嵌入式Linux實訓 第五天
一 內容總結 1.學習規範的編碼 以華為為標準 並了解規範編碼的優勢。2.複習指標 陣列 陣列指標 指標陣列 野指標,學習防止野指標出現。3.陣列 一維陣列 二維陣列 三維陣列,其中一維陣列的單位是元素,二維陣列的單位是一維陣列,三維陣列的單位是二維陣列。二 作業 include include s...
蘇嵌實訓 嵌入式Linux C 第五天
專案名稱 蘇嵌實訓 嵌入式linux c 第五天 今日進度及任務 今日任務完成情況 今日課內任務全部完成 本日開發 現的問題彙總 1.free函式是如何知道釋放多大空間?2.在什麼情況下使用static關鍵字?3.為什麼使用typedef給型別重新命名?本日開發收穫 學習了函式 記憶體管理 關鍵字的...