考虑此代码(它在VisualStudio 2012上编译并运行)
#include "stdafx.h"
#include <iostream>
int _tmain(int argc, _TCHAR* argv[])
{
int arr[100];
for (int i = 0; i < 100; ++i)
arr[i]=i;
int a = arr[10]; // 10
int a1 = arr[10,10]; // 10 <-
int a3 = arr[5,10,7]; // 7 <-
int a4 = arr[5,10,7,2]; // 2 <-
}
我不明白标有&lt; - 的行的含义是什么? 我预计会出现编译错误。 实际结果就像仅指定[]
中的最后一个数字一样所以, 这是什么意思?有什么好处?
答案 0 :(得分:5)
这不是一些特殊的数组下标语法。方括号内的表达式被计算为单个值,然后该值用于索引数组。所以你的最后一行等同于:
int a4 = arr[(5,10,7,2)];
那么该表达式是如何评估的呢?它使用逗号运算符。逗号运算符计算其左操作数并将其丢弃,然后计算其右操作数。表达式的值是右操作数的值。当你有一堆像这样的彼此相邻时,值是最右边的值 - 在上面的例子中,2。所以现在它相当于:
int a4 = arr[2];
逗号运算符的使用相当有限,但some of its uses are outlined on Wikipedia。通常,当封闭块不可用时(例如在静态初始化器中),它可用于评估两个不同的表达式。但是,在这种情况下,使用它没有任何效果。
答案 1 :(得分:2)
这是逗号运算符 - 评估所有表达式,并使用最后一个表达式。这里没有理由,它只会妨碍可读性。代码与
相同int a = arr[10]; // 10
int a1 = arr[10]; // 10 <-
int a3 = arr[7]; // 7 <-
int a4 = arr[2]; // 2 <-