数组初始化

时间:2012-03-20 11:11:28

标签: c++ arrays

这是非法声明没有大小的数组吗?像

int n;

int array[n]; 
cin>>n; // assign 5 to n, it will be array with size 5 OR


int n=5; // we assign 5 to n;
int array[n];// int array[5];

问题:哪个是合法的

3 个答案:

答案 0 :(得分:2)

也不是合法的c ++。数组的大小必须是常量:

int n = 5; int a[n]; // NOT legal, since it attempts to use VLA
int b[5];  // OK

如果有效,则通过延期。最新的c允许使用VLA。

答案 1 :(得分:2)

标准C ++仅允许数组大小的const值:

int array[5];

或:

const size_t SIZE = 5;
int array[SIZE];

有一个GCC扩展允许可变长度数组。

注意,如果初始化数组,可以省略数组的大小:

int array[] = { 67, 12, 88, 94, 37}; // size of 5.

由于这是C ++,请考虑使用std::vector<int>而不是数组。

答案 2 :(得分:0)

C ++不支持VLA,因为其他人提到您可以使用手动管理的动态数组。但不要。

你是一个矢量容器,它具有动态数组的所有优点,除了它是安全的,可调整大小的并且具有良好的界面。

size_t size;
std::cin >> size;
std::vector<int> arr(size, 0); //starting size, default value

arr[0]; //access elments
arr.at(0); //bounds checked access 
arr.push_bacK(6); add 6 to back, now has 6 elements

这些不需要删除任何东西,也没有泄漏的可能性。

http://en.cppreference.com/w/cpp/container/vector