Max*_*ers 0 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;
}
Run Code Online (Sandbox Code Playgroud)
显然,a例如在Python中,像二维数组一样访问一维数组。但是,此代码的确带有unused-value警告。我希望它会产生错误,因为我一直认为这是因为在C中多索引是完全错误的(请参见K&R第112页)。令我惊讶的是,以上代码确实打印出了数组元素。
如果将a[0, i]第六行更改为a[i, 0],则第一个数组元素将被打印3次。如果您使用a[i, 1]第二个元素,则将打印三遍。
如何将一维数组上语法错误的多索引转换为指针算术,并且a[i, 0]未使用结果的什么值?
而且,是的,我知道如何在C中进行多索引。
0, i是C中的有效表达式。逗号是一个运算符,它同时计算两个操作数并丢弃左操作数的结果。当用于时a[0, i],它等效于a[i]。和a[i, 0]等效于a[0]。
(请注意,在诸如之类的函数调用中f(a, b, c),逗号是参数分隔符。这是C语法的不同部分,在这种情况下,逗号不是运算符。)
| 归档时间: |
|
| 查看次数: |
59 次 |
| 最近记录: |