1. 程式人生 > >C語言 sizeof總結

C語言 sizeof總結

一、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]。