C ++中数组声明的一个问题

时间:2010-03-15 03:32:13

标签: c++

以下两个代码之间有什么区别。

int a[] = {0,0};
int a[2] = {0,0};

似乎我可以在两种情况下为[3]分配值。在任何情况下我都可以访问[3]。那有什么区别?

4 个答案:

答案 0 :(得分:10)

没有区别。在第一个中,编译器会为您进行计数,如果您决定稍后更改元素的数量,这很好。

您的编译器原谅您分配或使用a[3]的事实并不意味着这样做是正确的。实际上,您甚至无法访问a[2],因为它只有两个元素,由下标0和1索引。

答案 1 :(得分:2)

a[3]在两个实例中同样未定义。不要这样做。

答案 2 :(得分:2)

如果您愿意,可以访问[100000000],但这并不意味着它会出现在您的阵列中。

在任何一种情况下,您都声明了一个长度为2的数组。 写入[3]很可能会导致分段错误。

您可以访问的最高元素是[ARRAY_SIZE-1],因此使其成为[1]。

这两行代码都做同样的事情......

答案 3 :(得分:0)

C ++通常不会对数组进行边界检查 - 抱歉;)所以,你甚至可以访问[200] - 你将会访问数组外的SOMETHING。

在第一行中,您创建了一个包含两个元素的数组,在第二行中,我认为它是一个包含三个元素的数组,值为0,0,未定义。