天天看點

C語言那些小事--sizeof補齊

sizeof定義:用于計算資料類型所占的位元組數。OK,說道資料類型所占位元組數,那就總結下:

char  字元型 在記憶體占一個位元組,表示範圍 0~2的7次方

int 整形 在記憶體占四個位元組 ,表示範圍-2的31次方到2的31次方

float 單精度類型浮點型 在記憶體占 4個位元組,表示範圍 7位有效數字

void 空值 在記憶體占0位元組 ,無值

double  在記憶體占8個位元組,絕對值範圍10(-37)~10(38)

言歸正傳,接着說sizeof。

sizeof可以用于資料類型也可以用于變量,比如sizeof(int)就是4個位元組;再比如char a;sizeof (a)是1位元組。

好,下面看個程式:

#include<stdio.h>

struct X{ int a;char b;int c;char d;};

void main()

{

printf("%d",sizeof(struct X));

}

答案16.為什麼呢?補齊原則。有些人可能認為答案是10,如果那樣的畫系統會一個位元組 一個位元組取,效率太低了,為了提高效率char b要與int a一樣,補4個位元組,

後面同理。問題來了,如果是struct X{int a;char b;char c;int d;};答案就是12啦,第二個char補4個位元組,自己用一個剩下3個,後面char照樣可以使用前面1個位元組。但後面int需要4個位元組,剩餘2個位元組不能滿足了,是以需要額外開4個位元組。好了答案12出來了。還有個實驗就是structX{char a; char b;char c;int d;};答案是8.從中我們可以看出,系統從前向後檢視找到位元組數最大的,然後從頭補齊,第一個char4個位元組,後面兩個char享受前面剩餘3個位元組中的2個,後面int d位元組開4個位元組。

以上是個人看法,可能有些不專業,希望看到此篇文章朋友多多交流,提出寶貴的想法。

繼續閱讀