use*_*555 2 c arrays pointer-arithmetic subscript-operator
int main(){
int array[] = [10,20,30,40,50] ;
printf("%d\n",-2[array -2]);
return 0 ;
}
Run Code Online (Sandbox Code Playgroud)
任何人都可以解释-2 [array-2]是如何工作的,为什么[]在这里使用?这是我的任务中的一个问题,它给输出"-10",但我不明白为什么?
从技术上讲,这会调用未定义的行为.引用C11,章节§6.5.6
如果指针操作数和结果都指向同一个数组对象的元素,或者指向数组对象的最后一个元素,则评估不应产生溢出; 否则,行为未定义.[....]
所以,(array-2)是未定义的行为.
然而,大多数的编译器将读取的索引,并且将有可能能够以消除+2和-2索引,[ 2[a]是相同a[2]是相同*(a+2),因此,2[a-2]是*((2)+(a-2))],并且只考虑剩余的表达进行评估,其是*(a)或,a[0].
然后,检查运算符优先级
-2[array -2]实际上是一样的-(array[0]).因此,结果是价值array[0]和-ved.