sizeof()函數的使用——————【Badboy】,sizeof函數badboy
1.sizeof的使用:sizeof操作符以位元組形式給出了其運算元的儲存大小.
sizeof操作符不能用於函數類型,不完全類型或位欄位。不完全類型指具有未知儲存大小的資料類型,如未知儲存大小的數群組類型、未知內容的結構或等位型別、void類型等。
2.sizeof的結果:sizeof操作符的結果類型是size_t,它在標頭檔中typedef為unsigned int類型。該類型保證能容納實現所建立的最大對象的位元組大小。
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。
當運算元是指標時,sizeof依賴於編譯器。near類指標位元組數為2,far、huge類指標位元組數為4。一般Unix的指標位元組數為4。
當運算元具有數群組類型時,其結果是數組的總位元組數,等位型別運算元的sizeof是其最大位元組成員的位元組數。
結構類型運算元的sizeof是這種類型對象的總位元組數,包括任何墊補在內.
如果運算元是函數中的數組形參或函數類型的形參,sizeof給出其指標的大小。
struct MyStruct
{
char dda;//位移量為0,滿足對齊,dda佔用1個位元組;
double dda1;//下一個可用的地址的位移量為1,不是sizeof(double)=8
//的倍數,需要補足7個位元組才能使位移量變為8(滿足對齊
//方式),因此VC自動填滿7個位元組,dda1存放在位移量為8
//的地址上,它佔用8個位元組。
int type;//下一個可用的地址的位移量為16,是sizeof(int)=4的倍
//數,滿足int的對齊,所以不需要VC自動填滿,type存
//放在位移量為16的地址上,它佔用4個位元組。
};//所有成員變數都分配了空間,空間總的大小為1+7+8+4=20,不是結構
//的節邊界數(即結構中佔用最大空間的類型所佔用的位元組數sizeof
//(double)=8)的倍數,所以需要填充4個位元組,以滿足結構的大小為
//sizeof(double)=8的倍數
所以該結構總的大小為:sizeof(MyStruc)為1+7+8+4+4=24。其中總的有7+4=11個位元組是VC自動填滿的,沒有放任何有意義的東西.
C語言sizeof函數怎使用?
int i = sizeof(char);
printf("%d",i);
上邊的程式你就可以求出char類型所佔的位元組數
你可以把char改成對應的資料類型,就可以求出其他資料類型占的位元組數了
c中的sizeof函數
參數char str[] 等同於 char *str;而str表示指向頭元素的指標,而C/C++語言中把指標是看成一個是對地址的編碼。在32位的系統中,這個編碼是用一個32位的整數來表示的,也就是說如果你用sizeof(str)計算這個數組的長度就相當於sizeof(int)一個,其結果是4。如果你的目的是要表示這個數組的長度就得使用strlen(str)/sizeof(str[0]);strlen(str)表示的是str真是表量的長度。