array [0] = 0这怎么可能?

时间:2013-05-22 16:47:48

标签: c++ arrays

一个数组不能定义为c [0],它至少必须像c [1] 为什么以下代码正确?他在那做什么? 谢谢你的解释。

编辑:抱歉,伙计们,我在VS2012中编写C ++代码

int foo(double c[], int n) 
{

    if (n==1) {
        c[0] = 0;      //why is this possible?
    } else {
.
.
.

}

4 个答案:

答案 0 :(得分:6)

double c[],在论证位置,是double *c的语法糖;它实际上是一个指针。同样,c[0]*c的糖。

c[0] = 0;不是数组声明。它是c指向的数组的第一个元素的赋值。

答案 1 :(得分:2)

在变量声明中c[0]表示“c是大小为0的数组”。因为大小为0的数组在C或C ++中不存在(并且没有意义),就像你指出的那样,非法。

表达式c[0]表示“获取c的索引0处的元素”。由于C数组是0索引的,因此大小为n的数组的有效索引是0到n-1。由于数组的大小始终必须大于0,因此0始终是任何数组的有效索引。因此,如果c[0]是一个数组或指向有效内存的指针,则编写c始终是合法的。

由于c[i]是一个产生左值的表达式,因此写c[0] = someValue也是合法的(除非cconst)。

答案 2 :(得分:2)

此外,数组名称c可以被认为是数组中第一个元素的地址的同义词。 假设我们有数组double c [] as, enter image description here

我们已经知道数组索引总是从0开始

使用c [0]表示法,我们可以访问第一个21

元素

但实际编译器将c [0]转换为*(c + 0)以访问第一个元素。

同样,我们可以在程序中直接使用这些指针表示法。

例如,要访问可以使用索引c [2]访问的第三个元素, 我们可以使用指针*(c + 2)。

Thus , 
             in array ,  c[0] means *(c+0) 
                         c[1] means *(c+1) 
                         c[2] means *(c+2) and so on.

答案 3 :(得分:0)

“数组不能定义为c [0]”

可以!

数字的数组成员是数组的第一个成员

数组成员<1> 数组的第二个成员

总体:

具有X编号数组成员数组的第X + 1个成员

这不是巫术:原因是计算机不算数,十进制数字系统从数字零开始。