C語言 sizeof總結
阿新 • • 發佈:2019-01-01
一、sizeof用來計算一個變數,或者資料型別的長度,以位元組為單位。
它是一個操作符,如同++,--一樣,單運算元。
比如在我的電腦上,sizeof(int)=4,sizeof(long)=4。還有一般要求的sizeof(char)=1。
二、sizeof在陣列與指標上的特性
C語言中的指標使其具備了強大的功能,同時也造成了許多迷惑。眾多迷惑中的一點是sizeof在對待陣列與指標上的差別。
總結來說有以下兩點:
1 對於直接的呼叫sizeof,如果是陣列首地址,sizeof會輸出陣列所佔地址空間的大小(位元組為單位)。如果是一個指標的話,則輸出在該系統中地址的位元組寬度,即(位寬/8)。
如下程式碼:則會以輸出4, 30(一個char佔一個byte空間), 4。
int *a;
char b[30];
char *c;
printf("%d, %d, d\n", sizeof(a), sizeof(b),sizeof(c));
2 如果是通過函式傳遞過來的地址,那麼sizeof會把陣列首地址和指標無差別當成是地址。
如下的程式碼段輸出 4, 4
而且在編譯時編譯器會提示警告如下:void test_sizeof_addr(char *a) { printf("%d\n", sizeof(a)); } void test_sizeof_array(char a[]) { printf("%d\n", sizeof(a)); } int main() { char b[30]; test_sizeof_addr(b); test_sizeof_array(b); return 0; }
warning: ‘sizeof’ on array function parameter ‘a’ will return size of ‘char *’ [-Wsizeof-array-argument]。