sizeof()可用于定义数组长度吗?

时间:2011-11-23 08:51:51

标签: c arrays memory-management sizeof

我知道在C中,数组不应该是动态大小的。

考虑到这一点,是否允许以下​​代码? (试图声明一个字符数组与double的长度相同。)

char bytes[sizeof(double)];

我的猜测是sizeof在程序执行期间对其参数进行操作,因此不允许这样做,但我不确定。

另外,如果这是C ++而不是C,会有区别吗?

4 个答案:

答案 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;
}

请参阅http://ideone.com/95bwM

处的代码“正在运行”