我知道在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;
}
见代码