需要一点帮助理解这段代码究竟在做什么。 当我运行程序时,它会打印出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)
相同,您可以看到a
和b
的顺序并不重要。
c[b]
的意思与*(c + b)
相同。这应该会有所帮助。 - bzeamanE1[E2]
等同于(*((E1)+(E2)))
。 - bzeaman