【问题标题】:Can sizeof() be used to define an array length?sizeof() 可以用来定义数组长度吗?
【发布时间】:2012-01-04 13:51:53
【问题描述】:

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

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

char bytes[sizeof(double)];

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

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

【问题讨论】:

    标签: c arrays memory-management sizeof


    【解决方案1】:

    sizeof 表达式在编译时计算(由编译器而不是预处理器),因此该表达式是合法的。

    在 C99 中有一个例外,允许动态数组。在这种情况下, sizeof 会根据上下文在运行时进行评估 (http://en.wikipedia.org/wiki/Sizeof)。它不会改变问题中表达的合法性。

    【讨论】:

      【解决方案2】:

      是的,这样做完全没问题。 sizeof() 的值是在编译时确定的。

      【讨论】:

        【解决方案3】:

        是的,它可以而且它甚至不会是动态大小的,因为sizeof(double) 是一个编译时常量。

        【讨论】:

          【解决方案4】:

          如果它的操作数不是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查看代码“正在运行”

          【讨论】:

            猜你喜欢
            • 2020-10-15
            • 2015-11-12
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-12-18
            相关资源
            最近更新 更多