1

我在 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.

我不明白什么?

提前致谢

4

5 回答 5

7

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

于 2012-08-30T16:29:02.023 回答
3

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

您可以在此处找到更多详细信息。 如何找到“sizeof”(指向数组的指针)?

于 2012-08-30T16:32:25.950 回答
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 代替。

于 2012-08-30T16:36:29.673 回答
1

您的第二个 sizeof(floatArray) 实际上是返回指针的大小,而不是数组的大小。看这里

于 2012-08-30T16:30:55.703 回答
0

sizeof 运算符不知道指针指向什么以及有多少元素(除非你给它一个array,但这又不是一个指针)。所以它返回 sizeof (float *) - 因为你可能是 64 位的,所以指针的大小是 8 个字节长。

于 2012-08-30T16:33:03.483 回答