【问题标题】:regarding sizeof()关于 sizeof()
【发布时间】:2012-08-27 18:56:53
【问题描述】:

我对 sizeof() 有疑问。我知道它给出了数组中使用的字节数。我的问题是如果数组没有定义,但它声明了怎么办。

示例:

float array[3];
int p = sizeof(array);

【问题讨论】:

  • 那不是 C++ 代码,我不知道你在说什么。但是sizeof 只需要一个完全定义类型的声明。
  • 这不是数组的声明。这是浮点数的定义。
  • 请注意float array(3);float array[3]; 之间的区别。他们不一样!

标签: c++ memory


【解决方案1】:

sizeof 产生的值仅取决于类型,与运行时发生的任何事情无关1

也就是说,尽管有名字,float array(3); 只是定义了一个 single 浮点数,初始值为 3,所以int p=sizeof(array); 等价于int p = sizeof(float);

编辑:(对应于已编辑的问题):是的,float array[3]; 定义了一个包含 3 个浮点数的数组,因此 int p = sizeof(array); 相当于 int p = 3 * sizeof(float);


1 在 C++ 中。从 C99 开始,C 中的情况有些不同(但与手头的问题无关)。

【讨论】:

    【解决方案2】:

    当你使用这段代码时,你并没有声明一个浮点数组

     float array(3);
    

    您已经简单地创建了一个值为 3 的浮点变量 称为 数组。您对该变量的 sizeof 调用仅返回浮点的大小。你是否正确地声明了它

    float float_array[3];
    

    并调用 sizeof(float_array) 你会得到你期望的值 - 3*sizeof(float)

    【讨论】:

      【解决方案3】:

      sizeof() 没有给出数组中使用的字节数,您的定义不完整且部分不正确。

      http://en.cppreference.com/w/cpp/language/sizeof 说:

      "sizeof(type) --返回类型对象表示的字节大小"

      正如其他人所指出的,float array[3] 也是声明具有 3 个元素的浮点数组的正确方法。

      最后,sizeof(array) 将返回 12,而 sizeof(array) 将返回 16,如果你用 4 个元素声明它,如果你声明一个包含 5 个双精度而不是浮点数的数组,sizeof(array) 将返回 40,在至少在我的系统上。当然,用于数据类型的字节数可能因系统而异。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-10-19
        • 2017-03-26
        • 1970-01-01
        • 2021-06-23
        • 2020-01-05
        • 2012-02-13
        • 2019-07-17
        相关资源
        最近更新 更多