关于sizeof运算符的困惑

时间:2012-08-30 16:27:36

标签: c++ arrays macos sizeof

我在Mac OSX Lion上使用C ++,我创建了以下代码:

float* floatArray = new float[10];

for(int i = 0; i < 10; i++)
{
    floatArray[i] = 0.0 ;
}

std::cout<< "Test size of a float " << sizeof(floatArray[0]) << std::endl;
// The value is 4 byte which is what I would expect.

std::cout<< "Test the size of the whole array" << sizeof(floatArray) <<std::endl;
// the value is 8. I would have expected the value to be 40 bytes.

我不理解什么?

先谢谢

5 个答案:

答案 0 :(得分:7)

表达式sizeof(floatArray)返回指针的大小,而不是它指向的大小。

答案 1 :(得分:3)

在您的系统中,内存中指针的大小为8个字节。 Sizeof()运算符只是查看内存中该变量的大小。所以它打印浮点指针的大小。

您可以在此处找到更多详细信息。 How to find the 'sizeof' (a pointer pointing to an array)?

答案 2 :(得分:2)

将其与此实际比较(实际上 是一个数组):

float floatArray[10] = {0.0};
std::cout<< "sizeof a float " << sizeof(floatArray[0]) << std::endl;
std::cout<< "sizeof the whole array " << sizeof(floatArray) << std::endl;

然后,如果您需要使用动态大小或分配的数组,请考虑使用std :: vector。

答案 3 :(得分:1)

你的第二个sizeof(floatArray)实际上是返回指针的大小,而不是数组的大小。 见here

答案 4 :(得分:0)

sizeof运算符不知道指针指向的是什么元素和多少元素(除非您提供数组,但这不再是指针)。所以它返回sizeof(float *) - 并且你可能在64位上,指针的大小是8个字节长。