2011-11-23 47 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; 
} 

见代码

相关问题