c語言中的sizeof

2021-06-28 18:43:30 字數 3710 閱讀 2087



一、sizeof的概念

sizeof是c語言的一種單目操作符,如c語言的其他操作符++、--等。它並不是函式。sizeof操作符以位元組形式給出了其運算元的儲存大小。運算元可以是乙個表示式或括在括號內的型別名。運算元的儲存大小由運算元的型別決定。

二、sizeof的使用方法

1、用於資料型別

sizeof使用形式:sizeof(type);  

注:資料型別必須用括號括住。如sizeof(int)。

2、用於變數

sizeof使用形式:sizeof(var_name)或sizeof var_name

變數名可以不用括號括住。如sizeof (var_name),sizeof var_name等都是正確形式。帶括號的用法更普遍,大多數程式設計師採用這種形式。

注意:sizeof操作符不能用於函式型別,不完全型別或位字段。不完全型別指具有未知儲存大小的資料型別,如未知儲存大小的陣列型別、未知內容的結構或聯合型別、void型別等。如sizeof(max)若此時變數max定義為int max(),sizeof(char_v) 若此時char_v定義為char char_v [max]且max未知,sizeof(void)都不是正確形式。

三、sizeof的結果

sizeof操作符的結果型別是size_t,它在標頭檔案中typedef為unsigned int型別。該型別保證能容納實現所建立的最大物件的位元組大小。

1、若運算元具有型別char、unsigned char或signed char,其結果等於1。

ansi c正式規定字元型別為1位元組。

2、int、unsigned int 、short int、unsigned short 、long int 、unsigned long 、float、double、long double型別的sizeof 在ansi c中沒有具體規定,大小依賴於實現,一般可能分別為2、2、2、2、4、4、4、8、10。

3、當運算元是指標時,sizeof依賴於編譯器。

例如microsoft c/c++7.0中,near類指標位元組數為2,far、huge類指標位元組數為4。一般unix的指標位元組數為4。

4、當運算元具有陣列型別時,其結果是陣列的總位元組數。

5、聯合型別運算元的sizeof是其最大位元組成員的位元組數。

結構型別運算元的sizeof是這種型別物件的總位元組數,包括任何墊補在內。

讓我們看如下結構:

struct a;

在某些機器上sizeof(a)=12,而一般s一、sizeof的概念

sizeof是c語言的一種單目操作符,如c語言的其他操作符++、--等。它並不是函式。sizeof操作符以位元組形式給出了其運算元的儲存大小。運算元可以是乙個表示式或括在括號內的型別名。運算元的儲存大小由運算元的型別決定。

二、sizeof的使用方法

1、用於資料型別

sizeof使用形式:sizeof(type); 注:資料型別必須用括號括住。如sizeof(int)。

2、用於變數

sizeof使用形式:sizeof(var_name)或sizeof var_name

變數名可以不用括號括住。如sizeof (var_name),sizeof var_name等都是正確形式。帶括號的用法更普遍,大多數程式設計師採用這種形式。

注意:sizeof操作符不能用於函式型別,不完全型別或位字段。不完全型別指具有未知儲存大小的資料型別,如未知儲存大小的陣列型別、未知內容的結構或聯合型別、void型別等。如sizeof(max)若此時變數max定義為int max(),sizeof(char_v) 若此時char_v定義為char char_v [max]且max未知,sizeof(void)都不是正確形式。

三、sizeof的結果

sizeof操作符的結果型別是size_t,它在標頭檔案中typedef為unsigned int型別。該型別保證能容納實現所建立的最大物件的位元組大小。

1、若運算元具有型別char、unsigned char或signed char,其結果等於1。

ansi c正式規定字元型別為1位元組。

2、int、unsigned int 、short int、unsigned short 、long int 、unsigned long 、float、double、long double型別的sizeof 在ansi c中沒有具體規定,大小依賴於實現,一般可能分別為2、2、2、2、4、4、4、8、10。

3、當運算元是指標時,sizeof依賴於編譯器。

例如microsoft c/c++7.0中,near類指標位元組數為2,far、huge類指標位元組數為4。一般unix的指標位元組數為4。

4、當運算元具有陣列型別時,其結果是陣列的總位元組數。

5、聯合型別運算元的sizeof是其最大位元組成員的位元組數。

結構型別運算元的sizeof是這種型別物件的總位元組數,包括任何墊補在內。

讓我們看如下結構:

struct a;

在某些機器上sizeof(a)=12,而一般sizeof(char)+ sizeof(double)=9。這是因為編譯器在考慮對齊問題時,在結構中插入空位以控制各成員物件的位址對齊。如double型別的結構成員x要放在被4整除的位址。

6、如果運算元是函式中的陣列形參或函式型別的形參,sizeof給出其指標的大小。

四、sizeof與其他操作符的關係

sizeof的優先順序為2級,比/、%等3級運算子優先順序高。它可以與其他操作符一起組成表示式。如i*sizeof(int);其中i為int型別變數。

五、sizeof的主要用途

1、sizeof操作符的乙個主要用途是與儲存分配和i/o系統那樣的例程進行通訊。例如:

void *malloc(size_t size),

size_t fread(void * ptr,size_t size,size_t nmemb,file * stream)。

2、sizeof的另乙個的主要用途是計算陣列中元素的個數。

例如:void * memset(void * s,int c,sizeof(s))。

六、建議

由於運算元的位元組數在實現時可能出現變化,建議在涉及到運算元位元組大小時用ziseof來代替常量計算。izeof(char)+ sizeof(double)=9。這是因為編譯器在考慮對齊問題時,在結構中插入空位以控制各成員物件的位址對齊。如double型別的結構成員x要放在被4整除的位址。

6、如果運算元是函式中的陣列形參或函式型別的形參,sizeof給出其指標的大小。

四、sizeof與其他操作符的關係

sizeof的優先順序為2級,比/、%等3級運算子優先順序高。它可以與其他操作符一起組成表示式。如i*sizeof(int);其中i為int型別變數。

五、sizeof的主要用途

1、sizeof操作符的乙個主要用途是與儲存分配和i/o系統那樣的例程進行通訊。例如:

void *malloc(size_t size),

size_t fread(void * ptr,size_t size,size_t nmemb,file * stream)。

2、sizeof的另乙個的主要用途是計算陣列中元素的個數。

例如:void * memset(void * s,int c,sizeof(s))。

六、建議

由於運算元的位元組數在實現時可能出現變化,建議在涉及到運算元位元組大小時用ziseof來代替常量計算。

C語言中的sizeof

一 sizeof是編譯器的內建指示符 不是函式 sizeof用於計算型別或變數所佔的記憶體大小 sizeof的值在編譯期就已經確定 sizeof用於型別 sizeof type sizeof用於變數 sizeof var 或 sizeof var int var 0 printf d n sizeo...

c語言中的sizeof

首先,sizeof是c語言的一種單目操作符,以位元組的形式給出了其運算元的儲存大小,其返回值為size t,在64位機器下被定義為long unsigned int。sizeof測的大小,在不同的機器上可能不一樣,sizeof不能傳函式。1.基本資料型別 include include intmai...

c語言中的sizeof

記載一下我學習c語言的過程 型別名稱 輸入輸出的格式化就是 d,ld,lf 表達數的範圍不一樣 char這玩意就是乙個靜態運算子 靜態運算子我也不知道是什麼玩意,歡迎各位大佬指出 給出某個型別或變數在記憶體中所佔據的位元組數 printf s sizeof int d n sizeof int 4 ...