結構體大小的判斷

2021-07-22 06:18:28 字數 649 閱讀 1229

首先記清楚下圖

32 位和 64 位c資料型別

32和64位c語言內建資料型別,如下表所示:

32位和64位系統的區別在於long和指標,32位下他們是4位元組,64位下他們是8位元組

short都是2位元組,float都是4位元組,double都是8位元組,longlong都是8位元組

遵循兩條原則:一、結構體變數中成員的偏移量必須是成員大小的整數倍(0被認為是任何數的整數倍)

二、結構體大小必須是所有成員大小的整數倍。

tructa;

例如求上面這個結構體a的sizeof大小,在64位下

a1的偏移量為0,長度為8

a2的偏移量為0+8=8,長度為2

a3的偏移量為8+2=10,不符合int長度4的倍數,故偏移量變成12,,長度為4

a4的偏移量為12+4=16,長度為8

故總大小為16+8=24,24是所有成員大小的整數倍,故a的大小為24

結構體大小的判斷

結構體中的成員可以是不同的資料型別,成員按照定義時的順序依次儲存在連續的記憶體空間。和陣列不一樣的是,結構體的大小不是所有成員大小簡單的相加,需要考慮到系統在儲存結構體變數時的位址對齊問題。看下面這樣的乙個結構體 struct stu1 先介紹乙個相關的概念 偏移量。偏移量指的是結構體變數中成員的位...

sizeof進行結構體大小的判斷

typedef struct a t typedef struct b t typedef struct c t void main void foo4 char a4 也許當你試圖回答c4的值時已經意識到c3答錯了,是的,c3 3。這裡函式引數a3已不再是 陣列型別,而是蛻變成指標,相當於char...

sizeof進行結構體大小的判斷

typedef struct a t typedef struct b t typedef struct c t void main s1的最寬簡單成員的型別為int,s3在考慮最寬簡單型別成員時是將s1 打散 看的,所以 s3的最寬簡單型別為int,這樣,通過s3定義的變數,其儲存空間首位址需要被...