C语言中数组使用[0,1,2]形式索引的含义及等效[2]的原因解析
C语言数组索引中逗号表达式的问题解答
先看你给出的代码和运行结果:
int main(){ int a[]={1,2,3,4,5}; a[0,1,2]=10; for(int i=0;i<5;i++) printf("%d ",a[i]); return 0; }
运行输出:1 2 10 4 5
下面针对你的两个疑问逐一解释:
为什么数组能使用[0,1,2]这样的索引形式?
这里的逗号并不是数组索引的特殊语法,而是C语言里的逗号运算符。C语言规定数组的下标必须是一个能求值为整数的表达式,而逗号表达式本身就是合法的表达式——它允许你在一个位置写多个子表达式,所以编译器会把0,1,2当成数组下标的计算逻辑来处理,不会判定为语法错误。
为什么a[0,1,2]等效于a[2]?
逗号运算符的核心规则是:从左到右依次计算每个子表达式,最终返回最后一个子表达式的结果。
对于0,1,2这个表达式,程序会先计算0(结果直接丢弃),接着计算1(结果也丢弃),最后计算2,整个表达式的最终结果就是2。所以a[0,1,2]本质上就是a[2],给它赋值10自然会修改数组的第三个元素(数组下标从0开始),这就是输出里第三个位置变成10的原因。
注意:这种写法在实际开发中完全不推荐,可读性极差,很容易被误解成多维数组或者其他特殊语法,属于不良编码习惯。
内容的提问来源于stack exchange,提问作者Arin Paliwal
相关产品推荐
相关产品推荐

