我知道在C中,数组不应该是动态大小的。
考虑到这一点,是否允许以下代码? (试图声明一个字符数组与double的长度相同。)
char bytes[sizeof(double)];
我的猜测是sizeof
在程序执行期间对其参数进行操作,因此不允许这样做,但我不确定。
另外,如果这是C ++而不是C,会有区别吗?
答案 0 :(得分:8)
sizeof表达式在编译时评估(由编译器而不是预处理器),因此表达式是合法的。
C99中的此规则有一个例外,即允许使用动态数组。在这种情况下,sizeof根据上下文在运行时进行评估(http://en.wikipedia.org/wiki/Sizeof)。它不会改变问题中表达式的合法性。
答案 1 :(得分:6)
是的,它可以,它甚至不是动态大小的,因为sizeof(double)
是编译时常量。
答案 2 :(得分:1)
是的,这样做完全没问题。 sizeof()的值在编译时确定。
答案 3 :(得分:1)
如果其操作数不是VLA,则可以使用sizeof
作为实际内容。
#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;
}
处的代码“正在运行”