我知道在C中,數組不應該動態調整大小。可以使用sizeof()來定義數組長度嗎?
考慮到這一點,是否允許下列代碼? (試圖聲明字符數組的長度相同的兩倍。)
char bytes[sizeof(double)];
我的猜測是,sizeof
程序執行過程中它的參數進行操作,因此這將不會被允許的,但我不知道。
另外,如果這是C++而不是C,會有區別嗎?
我知道在C中,數組不應該動態調整大小。可以使用sizeof()來定義數組長度嗎?
考慮到這一點,是否允許下列代碼? (試圖聲明字符數組的長度相同的兩倍。)
char bytes[sizeof(double)];
我的猜測是,sizeof
程序執行過程中它的參數進行操作,因此這將不會被允許的,但我不知道。
另外,如果這是C++而不是C,會有區別嗎?
表達式的大小在編譯時(由編譯器而不是預處理器)評估,因此表達式是合法的。
在允許動態數組的C99中,此規則有一個例外。在這種情況下,sizeof取決於上下文,在運行時進行評估(http://en.wikipedia.org/wiki/Sizeof)。它不會改變問題中表達的合法性。
是的,這樣做很好。 sizeof()的值是在編譯時確定的。
是的,它可以,它甚至不會動態調整大小,因爲sizeof(double)
是編譯時常量。
如果它的操作數不是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;
}
見代碼