通常用來計算一個變數或者型別的大小的,單位是位元組
譬如sizeof(char)==1,sizeof(int*)==4這些是計算的型別的大小,char是一個位元組,int*是4個位元組(其實32位系統下指標都是4個位元組,譬如char*,void*等等)
另外譬如chara;那麼sizeof(a)==1
intb;那麼sizeof(b)==4(這個跟編譯器有關,有些是2)
另外在計算結構和類的大小的時候,也可以用sizeof來計算該類或者結構所佔的位元組.只是計算方法根據編譯器不同而有些不同,但基本的演算法都一樣,譬如char是1個位元組,int*是4個位元組,double是8個位元組,double*是4個位元組這樣子.有些編譯器會進行對齊處理,有些不會.但是這個一般沒有太大的意義.
在應用方面,譬如
1.計算陣列元素個數
inta[]={1,2,3,4,5,6,7,8,9,20};
sizeof(a)/sizeof(a[0])就是陣列a的大小除以單個元素的大小,那麼結果就是陣列a的元素個數,這樣比自己數來的方便,尤其是數量比較多的時候.在對陣列進行遍歷操作時,譬如for(inti=0;i<sizeof(a)/sizeof(a[0]);++i){...}
這樣就不容易出錯,不然很可能會出現少1或者多1的失誤
2.動態申請記憶體(用malloc,calloc,realloc的時候)
譬如要申請一段記憶體存放30個double型別數
那麼可以用(double*)malloc(sizeof(double)*30)也就是申請8*30個位元組的空間,並且把首地址返回給某個double*型別的變數
3.有些函式的引數需要位元組數的時候
通常用來計算一個變數或者型別的大小的,單位是位元組
譬如sizeof(char)==1,sizeof(int*)==4這些是計算的型別的大小,char是一個位元組,int*是4個位元組(其實32位系統下指標都是4個位元組,譬如char*,void*等等)
另外譬如chara;那麼sizeof(a)==1
intb;那麼sizeof(b)==4(這個跟編譯器有關,有些是2)
另外在計算結構和類的大小的時候,也可以用sizeof來計算該類或者結構所佔的位元組.只是計算方法根據編譯器不同而有些不同,但基本的演算法都一樣,譬如char是1個位元組,int*是4個位元組,double是8個位元組,double*是4個位元組這樣子.有些編譯器會進行對齊處理,有些不會.但是這個一般沒有太大的意義.
在應用方面,譬如
1.計算陣列元素個數
inta[]={1,2,3,4,5,6,7,8,9,20};
sizeof(a)/sizeof(a[0])就是陣列a的大小除以單個元素的大小,那麼結果就是陣列a的元素個數,這樣比自己數來的方便,尤其是數量比較多的時候.在對陣列進行遍歷操作時,譬如for(inti=0;i<sizeof(a)/sizeof(a[0]);++i){...}
這樣就不容易出錯,不然很可能會出現少1或者多1的失誤
2.動態申請記憶體(用malloc,calloc,realloc的時候)
譬如要申請一段記憶體存放30個double型別數
那麼可以用(double*)malloc(sizeof(double)*30)也就是申請8*30個位元組的空間,並且把首地址返回給某個double*型別的變數
3.有些函式的引數需要位元組數的時候