C ++如何找到数组的大小?

时间:2018-01-09 00:03:27

标签: c++ arrays multidimensional-array

与其他问题的区别

我不是问如何找到尺寸,而是如何找到尺寸。

目标

我想了解C ++如何找到数组的大小(使用sizeof(array))和2D数组(使用sizeof(array))。

当我运行代码时,我认为输出为36。但它是1224 !?如何制作输出36

我不知道如何计算数组的大小,所以当我说“三/六输出”时,我指的是数组中的数字量。

代码

#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;
}

2 个答案:

答案 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);

Output

3
6