sizeof是一個單目運算符,優先級爲2,它的用途是:由於數據類型隨系統運行環境可能導致不同,因此要知道一個變量在所有情況下的大小是很困難的,所以C定義了編譯時運算符,sizeof
sizeof(操作數);
1.若操作數是char,unsigned char ,signed char,則返回值一定是1,因爲ANSI C規定字符類型就是1個字節,下面三種寫法都會打印出1
printf("%d", sizeof(char));
printf("%d", sizeof(unsigned char));
printf("%d", sizeof(signed char));
2.除了1中的類型之外,其他的類型ANSI C沒有規定,所以返回值依賴於具體的實現
3.當操作數是指針時,sizeof依賴於具體的編譯器
4.當操作數是數組時,返回值是數組佔用的總內存字節數,下面示例會打印出16
int a[] = {1,2,3,4};
printf("%d", sizeof(a));
5.當操作數是聯合類型,則返回該聯合體內最大的那個成員類型所佔用的字節數,下面的示例會打印出8
union MyUnion
{
int a;
double b;
char c;
};
MyUnion ys;
printf("%d",sizeof(ys));
6.當操作數是結構體時,則返回的是該結構體所有成員類型+不同編譯器考慮對齊的情況,也就是說,最終還是取決於不同的編譯器,例如下面的代碼在我的visual studio 2017下打印出8
struct MyStruct
{
char a[3];
int b;
};
MyStruct ys;
printf("%d",sizeof(ys));
總結:總體來說,sizeof會返回操作數所佔了內存多少個字節