下面两个代码有什么区别。C++中数组声明的一个问题
int a[] = {0,0};
int a[2] = {0,0};
看来我可以在两种情况下为[3]赋值。无论如何,我都可以访问[3]。那有什么区别?
下面两个代码有什么区别。C++中数组声明的一个问题
int a[] = {0,0};
int a[2] = {0,0};
看来我可以在两种情况下为[3]赋值。无论如何,我都可以访问[3]。那有什么区别?
没有区别。在第一种情况下,编译器会为您计数,如果您稍后决定更改元素的数量,这很好。
事实上,您的编译器原谅您分配或使用a[3]
并不意味着这样做是正确的。实际上,您甚至无法访问a[2]
,因为它只有两个元素,由下标0和1索引。
IOW,并不意味着你可以做一些你应该做的事情。 – kiwicptn 2010-03-15 04:48:32
a[3]
在这两个实例中同样未定义。不要这样做。
C++通常不会对数组进行边界检查 - 抱歉;)因此,您甚至可以访问[200] - 您可以访问阵列外部的SOMETHING。
在第一行中,您创建了一个由两个元素构成的数组,在第二行中我认为它是一个由三个元素组成的数组,其值为0,0未定义。
如果您愿意,您可以访问[100000000],但并不意味着它将在您的阵列中。
在这两种情况下,您都声明了长度为2的数组。 写入[3]很可能会导致分段错误。
您可以访问的最高元素是一个[ARRAY_SIZE-1],因此它成为[1]。
这两项的代码行做同样的事情......
我怀疑'a [3]'会导致段错误,但它取决于'a'的位置和“多远”出界“a [3]”,以及您的系统有多敏感。 – 2010-03-15 03:37:46
不错,克里斯。我只是假设或恐惧发展到认为写出数组边界是所有邪恶的根源 – Fuzz 2010-03-17 01:36:15
您不能访问'[3]'在任何情况下,无论你的编译器可以让你做什么。这已经被问过。 – 2010-03-15 03:34:18
没有勺子^ H^H^H^H^H a [3]。 (嘿,为什么不评论工作?) – paxdiablo 2010-03-15 03:56:52