C 中結構體占位元組數(sizeof)

2021-08-03 12:52:23 字數 824 閱讀 6661

首先看一段**

struct xsrt;

int main()

輸出為 sizeof(srt)=16 sizeof(srt.a)=1 sizeof(srt.b)=4 sizeof(srt.c)=8

出現這種情況的原因是記憶體位元組對齊導致

當然 這裡記住兩個原則就可以將這個問題搞清楚

第一 結構體中的元素是按照順序乙個個放入記憶體,而且每個元素放入的首位址(相對位址)一定是自己本身長度的整數倍 如上**中a佔了0~3 b佔4~7 c佔8~15 0 4 8 分別是 char int double 的整數倍位置

我們再看一段**

struct xsrt;

int main()

將第一處的**的double 與int 換了乙個位置後 得到sizeof(srt)=24 char 放在了0~7 double在8~15

int在16~19 所以這裡涉及到第二個原則

第二 佔空間為最大資料佔空間的整數倍 所以在記憶體20~23為對齊補全的。

最後順便說一下聯合體 union

由於聯合體中的所有成員是共享一段記憶體的,因此每個成員的存放首位址相對於於聯合體變數的基位址的偏移量為0,即所有成員的首位址都是一樣的。為了使得所有成員能夠共享一段記憶體,因此該空間必須足夠容納這些成員中最寬的成員。
union u

;int main(){

union u u1;

cout

<< sizeof(u1)如果有錯誤 歡迎指正 比心 ([email protected]

sizeof的詳盡計算結構體位元組數方法

本文主要包括二個部分 第一部分重點介紹在vc中,怎麼樣採用sizeof來求結構的大小,以及容易出現的問題,並給出解決問題的方法。第二部分總結出vc中sizeof的主要用法。1 sizeof應用在結構上的情況 請看下面的結構 struct mystruct 對結構mystruct採用sizeof會出現...

sizeof的詳盡計算結構體位元組數方法

本文主要包括二個部分,第一部分重點介紹在vc中,怎麼樣採用sizeof來求結構的大小,以及容易出現的問題,並給出解決問題的方法,第二部分總結出vc中sizeof的主要用法。1 sizeof應用在結構上的情況 請看下面的結構 struct mystruct 對結構mystruct採用sizeof會出現...

sizeof的詳盡計算結構體位元組數方法

本文主要包括二個部分,第一部分重點介紹在 vc中,怎麼樣採用 sizeof 來求結構的大小,以及容易出現的問題,並給出解決問題的方法,第二部分總結出vc中 sizeof 的主要用法。1 sizeof 應用在結構上的情況 請看下面的結構 struct mystruct 對結構mystruct 採用si...