C 學習基礎十五 sizeof的常見使用

2022-07-20 09:15:13 字數 1364 閱讀 9075

型別

32位系統(位元組)

64位系統(位元組)

char11

int4

4short22

long48

float44

double48

指標48上表中是基本型別在不同平台上所占用的記憶體大小,例如sizeof(int) = 4。

使用sizeof計算陣列占用記憶體的位元組數的計算方法是 型別位元組數*陣列長度。

例如:

1

int m_anums[3];2

sizeof(m_anums);

使用sizeof計算m_anums的位元組數是12。

結構體中的成員變數可以是不同型別,是根據宣告的順序依次存入記憶體。跟陣列不同的是,結構體的大小不是成員變數大小的簡單相加。

結構體所佔記憶體大小的位元組數是由結構體內最後乙個成員變數的偏移量+最後乙個成員變數的位元組大小計算而得的。

(1)每個結構體內成員變數的偏移量必須是該變數大小的整數倍。

(2)計算得到的結構體的大小必須是結構體內每個成員變數大小的整數倍,即結構體大小的值是每個成員變數大小的最小公倍數。

例如:

1 typedef struct

sa;6

7 typedef struct

sb;

結果:sizeof(sa) = 24;sizeof(sb) = 16。

分析:sa結構體內:a的偏移量 = 0,a的大小 = 4;

c的偏移量 = 8,c的大小 = 8;(注意:c的偏移量不能是4,因此4不是c的大小的整數倍,因此c的偏移量必須補上4位變為8)

b的偏移量 = 16,b的大小 =  2;

計算得到結果24,不能是18,因為18不是4和8的最小公倍數,因此最後結果是需要補上6位得到其最小公倍數24。                 

sb結構體內:a的偏移量 = 0,a的大小 = 4;

b的偏移量 = 4,b的大小 = 2;

c的偏移量 = 8,c的大小 = 8;(注意:c的偏移量不能6,因為6不是c大小的整數倍,因此補上2位,變為8)

計算得到結果是16。

從sa和sb兩個結構體的計算大小可知,結構體內變數宣告順序的不同,會導致結構體所佔大小的不同。

(1)將嵌入的結構體展開,被展開的結構體的第乙個成員變數的偏移量是被展開結構體中最大的成員變數大小的整數倍。

(2)最終計算的結構體的大小必須是所有成員變數大小的整數倍,這裡所有成員變數計算的是展開後的變數,而不是將嵌入的結構體作為乙個整體。

例如:

struct

sc

ss;

intk;

}

sizeof(sc) = 16,其中ss.c的偏移量是4,而不是2。

swift基礎學習 十五

1.所用到的知識點 2.效果 3.import uikit var window uiwindow?let view window rootviewcontroller view let logolayer calayer logolayer.bounds cgrect x 0,y 0,width ...

C 基礎學習第十五課 異常處理

10,異常處理 1,定義 異常處理就是處理程式中的錯誤 2,基本思想 讓乙個函式在發現了自己無法處理的錯誤時,丟擲 throw 乙個異常,然後它的 直接或間接 呼叫者可以吹這個問題 即將問題檢測和問題處理分離 3,異常基本語法 1,丟擲異常使用throw 2,捕獲異常使用try catch thro...

總結常出現的求sizeof值的情況

總結常出現的求sizeof值的情況 以前對於c c 求一些變數的sizeof值很是疑惑,現在經過一段時間的了解,大致有個了解,現在對一些普遍存在,經常要求sizeof值得情況做個總結,整理了很長時間哦!1 普通變數的sizeof 普通變數的sizeof值就等於其型別的大小,與變數賦值沒有關係。例如 ...