需要一点帮助来了解此代码段中到底发生了什么。
当我运行程序时,它会打印7。

#include <stdio.h>
int main() {
int a[] = {1,2,3,4,5,6,7,8,9};
int b[] = {1,2,3,4,5,6,7,8,9};
int c = 5;
int *p = a;
printf("--> %d", (c[b])[p]);
return 0;
}

对于printf语句中的[c [b]] [p]部分,我感到有些困惑。
任何帮助/解释将不胜感激。

最佳答案

这样写有点奇怪,但是C语言中的[]运算符是可交换的。这意味着(c[b])[p]p[b[c]]相同,这更容易理解:

p[b[c]] = p[b[5]] = p[6] = a[6] = 7

用原始表达式做同样的事情也可以,但是在某些地方看起来有点奇怪:
(c[b])[p] = (5[b])[p] = (b[5])[p]) = 6[p] = p[6] = a[6] = 7
[]的可交换性(如果是一个单词)仅是由于其定义-即a[b]*(a + b)相同,在这里您可以看到ab的顺序无关紧要。

关于c - 了解C数组和指针,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27464990/

10-12 01:27
查看更多