Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 错误的数组索引不会导致错误_C_Arrays_Indexing_Comma Operator - Fatal编程技术网

C 错误的数组索引不会导致错误

C 错误的数组索引不会导致错误,c,arrays,indexing,comma-operator,C,Arrays,Indexing,Comma Operator,考虑以下计划: #include <stdio.h> int main(void) { int a[] = {1, 2, 3}; for (size_t i = 0; i < 3; i++) printf ("%i\n", a[0, i]); return 0; } 显然,在例如Python中,访问一维数组a就像访问二维数组一样。但是,此代码编译时会出现未使用值警告。我希望它会产生一个错误,因为我一直认为这对于C中的多重索引是错误的

考虑以下计划:

#include <stdio.h>
int main(void)
{
    int a[] = {1, 2, 3};

    for (size_t i = 0; i < 3; i++)
        printf ("%i\n", a[0, i]);

    return 0;
}
显然,在例如Python中,访问一维数组a就像访问二维数组一样。但是,此代码编译时会出现未使用值警告。我希望它会产生一个错误,因为我一直认为这对于C中的多重索引是错误的,请参见K&R第112页。令我惊讶的是,上面的代码确实打印出了数组元素

如果将第六行的[0,i]更改为[i,0],则第一个数组元素将打印三次。如果使用[i,1],第二个元素将打印三次

一维数组上语法错误的多索引如何转换为指针算术,以及[i,0]的结果的哪个值未使用

是的,我知道如何在C中进行多重索引。

0,我在C中是一个有效的表达式。逗号是一个运算符,用于计算两个操作数并丢弃左操作数的结果。在[0,i]中使用时,它相当于[i]。a[i,0]等于a[0]

注意,在fa、b、c等函数调用中,逗号是参数分隔符。这是C语法的一个不同部分,逗号在此上下文中不是运算符。

此处的逗号是运算符。它不是一个理想的[0][i]或[i][0]形式的多重索引

引用C11,第§6.5.17章

逗号运算符的左操作数作为空表达式计算;有一个 其求值与右操作数求值之间的序列点。然后右转 计算操作数;结果有其类型和值

所以,在你的情况下

a[0, i]

a[i]

a[0]

您混淆了逗号运算符a、b和多维数组索引[a][b]。
a[0]