我正在尝试创建一个大小为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]
}
}发布于 2018-08-26 04:58:09
发布于 2018-08-26 04:59:41
sizeof:返回类型的对象表示形式的大小,单位为字节。
现在,由于int需要4字节(这是编译器的implementation defined特性),因此int[5]数组的大小将为5*4=20 bytes 。
如果想要获得数组的大小,可以使用(正如Deduplicator在注释中指出的那样):
std::size( userInput );在这种情况下,不要忘记使用#include <iterator>。
发布于 2018-08-26 05:19:40
或者,要获得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;
}
}或者将C样式数组替换为std::array包装器:
#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;
}
}https://stackoverflow.com/questions/52021147
复制相似问题