2011-11-23 88 views
5

我知道在C中,數組不應該動態調整大小。可以使用sizeof()來定義數組長度嗎?

考慮到這一點,是否允許下列代碼? (試圖聲明字符數組的長度相同的兩倍。)

char bytes[sizeof(double)]; 

我的猜測是,sizeof程序執行過程中它的參數進行操作,因此這將不會被允許的,但我不知道。

另外,如果這是C++而不是C,會有區別嗎?

回答

7

表達式的大小在編譯時(由編譯器而不是預處理器)評估,因此表達式是合法的。

在允許動態數組的C99中,此規則有一個例外。在這種情況下,sizeof取決於上下文,在運行時進行評估(http://en.wikipedia.org/wiki/Sizeof)。它不會改變問題中表達的合法性。

1

是的,這樣做很好。 sizeof()的值是在編譯時確定的。

6

是的,它可以,它甚至不會動態調整大小,因爲sizeof(double)是編譯時常量。

1

如果它的操作數不是VLA,則可以使用sizeof作爲實際的內容。 「運行」,在http://ideone.com/95bwM

#include <stdio.h> 
#include <string.h> 

int main(void) { 
    double x; 
    unsigned char dbl[sizeof x];        /* real constant */ 

    /* make x's format have a 1 bit on the "correct" place */ 
    x = 32.000000000000004; 
    memcpy(dbl, &x, sizeof x); 
    switch (dbl[0]) { 
    case sizeof *dbl: puts("1"); break;     /* real constant */ 
    case 0: puts("0"); break; 
    default: puts("other"); 
    } 
    return 0; 
} 

見代碼

相關問題