以下两个代码之间有什么区别。
int a[] = {0,0};
int a[2] = {0,0};
似乎我可以在两种情况下为[3]分配值。在任何情况下我都可以访问[3]。那有什么区别?
答案 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,未定义。