关于sizeof()

时间:2012-08-27 18:56:53

标签: c++ memory

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

示例:

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

3 个答案:

答案 0 :(得分:5)

sizeof产生的值完全取决于类型,而不是运行时发生的任何事情 1

尽管名称如此,float array(3);只是定义了一个单个浮点数,初始值为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的情况有所不同(但与手头的问题无关)。

答案 1 :(得分:1)

使用此代码时,您没有声明浮点数组

 float array(3);

你已经简单地创建了一个浮点变量名为的数组,其值为3.您对此变量的sizeof调用只返回float的大小。如果你正确宣布

float float_array[3];

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

答案 2 :(得分:1)

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

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

“sizeof(type) - 返回类型为”

的对象表示的字节大小

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

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