我在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.
我不理解什么?
先谢谢
答案 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个字节长。