为什么我的cpp数组大小是4的倍数?

时间:2018-08-25 20:54:39

标签: c++ arrays sizeof

我试图创建一个大小为5的数组,并使用输入填充每个索引,然后在每个索引处打印出每个输入。我得到的是数组大小为4的倍数。因此,当我输入5作为大小时,我得到的是20而不是5。

#include <iostream>
using namespace std;

int main() {
    int userInput[5];
    cout << sizeof(userInput);

    // take input to fill array
    for (int i = 0; i < sizeof(userInput); i++) {
        cin >> userInput[i];
    }

    // print the array contents
    for (int i = 0; i < sizeof(userInput); i++) {
        cout << userInput[i]
    }
}

3 个答案:

答案 0 :(得分:3)

这是因为sizeof

  

返回类型的对象表示形式的大小(以字节为单位)。

不是数组的大小。 (int's长4个字节)

答案 1 :(得分:3)

来自cppreference.com

  

sizeof :返回类型的对象表示形式的大小(以字节为单位)

现在,由于div占用className="my-checkbox"个字节(这是编译器的implementation defined功能),因此int的数组的大小为4 < strong>字节。

如果要获取数组的大小,可以使用(如Deduplicator在注释中指出的那样):

int[5]

在这种情况下,请不要忘记使用5*4=20

答案 2 :(得分:2)

或者,要获取C数组的大小,请在支持C ++ 17的编译器上使用std::size()函数:

#include <iostream>

int main() {
    int userInput[5];
    int arrsize = static_cast<int>(std::size(userInput));

    for (auto i = 0; i < arrsize; i++) {
        std::cin >> userInput[i];
    }

    for (auto i = 0; i < arrsize; i++) {
        std::cout << userInput[i];
    }
}

您可以使用range-based for loops简化操作:

#include <iostream>

int main() {
    int userInput[5];
    for (auto& el : userInput) {
        std::cin >> el;
    }
    for (auto el : userInput) {
        std::cout << el;
    }
}

或用std::array包装器替换C样式数组:

#include <iostream>
#include <array>

int main() {
    std::array<int, 5> userInput;
    for (auto& el : userInput) {
        std::cin >> el;
    }
    for (auto el : userInput) {
        std::cout << el;
    }
}