C++ 为什么这段代码可以运行?双a[3];a[1,1]=1;

C++ 为什么这段代码可以运行?双a[3];a[1,1]=1;,c++,arrays,C++,Arrays,它通过vs2013编译器,而不是2D数组 int main() { double a[3]; a[1,1]=1; } 相当于: a[1,1]=1; 表达式1,1的计算结果为1,因为第一个1被丢弃,只有第二个1被计算。有关详细信息,请阅读。您正在调用。这将计算其第一个操作数,丢弃它,然后返回第二个操作数。因此,您的代码相当于 a[1]=1; 访问2D数组元素的语法如下 a[1] = 1; 在方括号内的表达式中有所谓的逗号运算符 b[1][2] = 42; 它的值是最后

它通过vs2013编译器,而不是2D数组

int main()
{
    double a[3];  
    a[1,1]=1;
}
相当于:

a[1,1]=1;
表达式
1,1
的计算结果为
1
,因为第一个
1
被丢弃,只有第二个
1
被计算。有关详细信息,请阅读。

您正在调用。这将计算其第一个操作数,丢弃它,然后返回第二个操作数。因此,您的代码相当于

a[1]=1;
访问2D数组元素的语法如下

a[1] = 1;

在方括号内的表达式中有所谓的逗号运算符

b[1][2] = 42;
它的值是最后一个子表达式的值

所以这句话相当于

a[1,1]=1;
int main()
{
    double a[3];  
    size_t i = 0;  
    a[i++, i++]=1;
}
此语法如下所示:

a[1]=1;
在C#中也有效,但它设置了二维数组的元素

在C/C++中,多维数组的每个索引应包含在单独的方括号中

下面是一个更有趣的逗号运算符示例

a[1,1]=1;
它也相当于

a[1,1]=1;
int main()
{
    double a[3];  
    size_t i = 0;  
    a[i++, i++]=1;
}

2D数组的语法将是[1][1],如果我有一个矩阵类,并重载运算符[],那么使用矩阵[I,j]@liangbright:来解释为什么:重载
运算符
不能更改它所需的参数数量,只有一个例外:
运算符()