前言
c語言中的sizeof是乙個很有意思的關鍵字,經常有人用不對,搞不清不是什麼。我以前也有用錯的時候,現在寫一寫,也算是提醒一下自己吧。
sizeof是什麼
sizeof是c語言的一種單目操作符,如c語言的其他操作符++、--等,sizeof操作符以位元組形式給出了其運算元的儲存大小。運算元可以是乙個表示式或括在括號內的型別名。這個運算元不好理解對吧?後面慢慢看就明白了。sizeof的返回值是size_t,在64位機器下,被定義為long unsigned int。
sizeof函式的結果:
1.變數:變數所佔的位元組數。
int i = 0;
printf("%d\n", sizeof(i)); //4
2.陣列:陣列所佔的位元組數。
int arr_int1 = ;
int arr_int2[10] = ;
printf("size_arr1=%d\n",sizeof(arr_int1)); //5*4=20
printf("size_arr2=%d\n",sizeof(arr_int2)); //10*4=40
3.字串:其實就是加了'\0'的字元陣列。結果為字串字元長度+1。
char str = "str";
printf(ezskx"size_str=%d\n",sizeof(str)); //3+1=4
4.指標:固定長度:4(32位位址環境)。
特殊說明:陣列作為函式的入口引數時,在函式中對陣列sizeof,獲得的結果固定為4:因為傳入的引數是乙個指標。
int get_size程式設計客棧(int arr)
int main() ;
printf("size_fun_arr=%d\n",get_size(arr_int)); //4
}5.結構體
1.只含變數的結構體:
結果是最寬變數所佔位元組數的整數倍:[4 1 x x x ]
typedef struct test test_t;
printf("size_test=%d\n", sizeof(test_t)); //8
幾個寬度較小的變數可以填充在乙個寬度範圍內:[4 2 1 1]
typedef struct test test_t;
printf("size_test=%d\n", sizeof(test_t)); //8
位址對齊:結構體成員的偏移量必須是其自身寬度的整數倍:[4 1 x 2 1 x x x]
typedef struct test test_t;
printf("size_test=%d\n", sizeof(test_t)); //12
2.含陣列的結構體:包含整個陣列的寬度。陣列寬度上文已詳述。[4*10 2 1 1]
typedef struct test test_t;
printf("size_test=%d\n", sizeof(test_t)); //44
3.巢狀結構體的結構體
包含整個內部程式設計客棧結構體的寬度(即整個展開的內部結構體):[4 4 4]
typedef struct son son_t;
typedef struct father father_t;
printf("size_struct=%d\n",sizeof(father_t)); //12
位址對齊:被展開的內部結構體的 首個成員的偏移量 ,必須是被展開的 內部結構體中最寬變數 所佔位元組的整數倍:[2 x x 2 x x 4 4 4]
typedef struct son son_t;
typedef struct father father_t;
printf("size_struct=%d\n",sizeof(father_t)); //20
總結本文標題: c語言中sizeof函式的基本使用總結
本文位址:
c語言中的sizeof
一 sizeof的概念 sizeof是c語言的一種單目操作符,如c語言的其他操作符 等。它並不是函式。sizeof操作符以位元組形式給出了其運算元的儲存大小。運算元可以是乙個表示式或括在括號內的型別名。運算元的儲存大小由運算元的型別決定。二 sizeof的使用方法 1 用於資料型別 sizeof使用...
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...