此行中发生的事情:
-1[0[ptr]][0]
答案 0 :(得分:1)
从技术上讲,这是有效的C代码,但不值得这样写。考虑这个愚蠢的例子。
char v = array[3];
现在,我们可以用指针算法重写它。例如
char v = *(array + 3);
但是,由于加法是可交换的,因此这也是有效的:
char v = *(3 + array);
并且由于加法是可交换的,因此可以得出数组括号也是可交换的。因此,这在C语言中完全有效:
char v = 3[array];
如果您希望解开已发布的代码,则可以分步进行。...
float f0(float*** ptr)
{
return -1[0[ptr]][0];
}
float f1(float*** ptr)
{
return -1[ptr[0]][0];
}
float f2(float*** ptr)
{
return -ptr[0][1][0];
}
这是它们相同的证明:
(f2和f3只会导致对f1的尾部调用)
/ edit我想问这个问题对你如此严厉地惩罚是有点不公平的。实际上,这是一个很少有人知道的C / C ++怪癖。