考虑以下方案:
#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;
}显然,一维数组a就像在Python中的二维数组一样被访问.但是,这段代码确实带有unused-value警告。我希望它会产生一个错误,因为我一直认为这是因为多索引在C中是错误的(参见K&R页112)。令我惊讶的是,上面的代码确实打印出了数组元素。
如果将第六行的a[0, i]更改为a[i, 0],则会打印第一个数组元素三次。如果使用a[i, 1],第二个元素将打印三次。
在一维数组上如何将语法错误的多索引转换为指针算术,a[i, 0]的结果是什么值未使用?
而且,是的,我知道如何在C中进行多索引。
发布于 2019-08-22 13:54:10
这里的逗号是逗号运算符。它不是一个多索引(理想情况下应该是[0][i]或[i][0]格式)。
引用C11,第6.5.17节(强调地雷)
逗号运算符的左操作数被计算为一个空表达式;它的计算值和右操作数之间有一个序列点。然后计算右操作数;结果有其类型和值.。
所以,就你来说,
a[0, i]是相同的
a[i]和
a[i, 0]是一样的
a[0]发布于 2019-08-22 13:53:04
0, i是C中的一个有效表达式。逗号是计算操作数和丢弃左操作数结果的操作符。在a[0, i]中使用时,它等同于a[i]。a[i, 0]相当于a[0]。
(注意,在函数调用(如f(a, b, c) )中,逗号是一个参数分隔符。这是C语法的一个不同部分,在这个上下文中逗号不是运算符。)
https://stackoverflow.com/questions/57610939
复制相似问题