与其他问题的区别
我不是问如何找到尺寸,而是如何找到尺寸。
目标
我想了解C ++如何找到数组的大小(使用sizeof(array)
)和2D数组(使用sizeof(array)
)。
当我运行代码时,我认为输出为3
和6
。但它是12
和24
!?如何制作输出3
和6
?
我不知道如何计算数组的大小,所以当我说“三/六输出”时,我指的是数组中的数字量。
代码
#include <iostream>
using namespace std;
int main()
{
int oneDArray [3] = {1, 2, 3};
int twoDArray [2][3] = {{1, 2, 3}, {1, 2, 3}};
cout << sizeof(oneDArray) << "\n" << sizeof(twoDArray);
return 0;
}
答案 0 :(得分:8)
The sizeof
operator以字节为单位返回大小,而不是元素。
对于单维数组(不作为函数参数传递,这会导致指针衰减),您可以通过将数组的大小除以第一个的大小来获取元素数元素,例如
sizeof(oneDArray) / sizeof(oneDArray[0]) // Gets 3
对于多维数组,它会告诉您第一个维度的大小,而不是总元素的数量,因此您需要深入钻取:
sizeof(twoDArray) / sizeof(twoDArray[0]) // Gets 2 (first dimension of array)
sizeof(twoDArray) / sizeof(twoDArray[0][0]) // Gets 6 (number of elements)
你当然可以明确地命名一个元素的类型以避免嵌套索引(sizeof(twoDArray) / sizeof(int)
得到6就好了),但我作为规则避免它;数组在开发过程中更改类型太常见了(比如,事实证明你需要使用int64_t
,因为你有数万亿的值),如果整个表达式都没有数组的术语很容易被忽视,最终会破坏代码。
答案 1 :(得分:6)
sizeof
返回字节,如果您期望元素数量,则除以每个元素的大小
cout << sizeof(oneDArray)/sizeof(int) << "\n" << sizeof(twoDArray)/sizeof(int);
3
6