当我尝试运行它时,我无法理解为什么这个代码会破坏。 我使用GCC编译器
#include <iostream>
using namespace std;
int main() {
int arr[] = {0};
for(int x=0; x<6; x++)
arr[x] = x;
for(int y=0; y<6; ++y)
cout<< "arr[" << y <<"] = " << arr[y] << endl;
return 0;
}
答案 0 :(得分:5)
int arr[] = {0};
声明一个数组,其中只包含一个元素。因此,该数组唯一有效的索引是arr[0]
。尝试使用任何非零整数进行索引将导致未定义的行为。
答案 1 :(得分:0)
你需要
int arr[6];
声明一个包含6个元素的数组
答案 2 :(得分:0)
错误在于: int a [] = {0}; 通过这个你创建了一个只包含一个元素的数组,之后你试图访问6个元素。将上述行替换为: int a [6] = {0};
答案 3 :(得分:0)
因此,有几种方法可以实现您的目标。有些是C风格,有些使用C ++ STL容器,我用4种不同的方式重新编写代码来显示差异。有c个静态大小的数组和c ++静态大小的类(大小必须在编译时知道),c动态大小的数组(这些将在堆上分配,c ++动态大小的向量。我建议你在每个上做一些阅读但是在这里是一些基本的例子。
#include <iostream>
#include <vector>
#include <array>
using namespace std;
int main() {
// C style Static sized array
int arr_sty_1[6];
for(int x=0; x<6; x++)
arr_sty_1[x] = x;
for(int y=0; y<6; ++y)
cout<< "arr_sty_1[" << y <<"] = " << arr_sty_1[y] << endl;
// C++ style Static sized array
array<int, 6> arr_sty_2;
for(int x=0; x<6; x++)
arr_sty_2[x] = x;
for(int y=0; y<6; ++y)
cout<< "arr_sty_2[" << y <<"] = " << arr_sty_2[y] << endl;
// C style dynamic sized array
int* arr_sty_3 = new int[6];
for(int x=0; x<6; x++)
arr_sty_3[x] = x;
for(int y=0; y<6; ++y)
cout<< "arr_sty_3[" << y <<"] = " << arr_sty_3[y] << endl;
// C++ style dynamic size vector (dynamic array ish)
vector<int> arr_sty_4;
for(int x=0; x<6; x++)
arr_sty_4.push_back(x);
for(int y=0; y<6; ++y)
cout<< "arr_sty_4[" << y <<"] = " << arr_sty_4[y] << endl;
return 0;
}