Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
理解C数组和指针_C_Arrays_Pointers_Printf - Fatal编程技术网

理解C数组和指针

理解C数组和指针,c,arrays,pointers,printf,C,Arrays,Pointers,Printf,需要一些帮助来理解此代码段中到底发生了什么。 当我运行程序时,它打印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; } #包括 int main(){ int a[]={1,2,3,4,5,6,7,8,9}; i

需要一些帮助来理解此代码段中到底发生了什么。 当我运行程序时,它打印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;
}
#包括
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]);
返回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)
相同。这应该会有帮助。可能是@BennoZeeman的副本。你忘了一些括号。它们很重要。i、 例如,请参阅当前的答案。一个更完整的解释在中。@remyabel谢谢,你是对的。我刚刚检查了C标准,他们提到
E1[E2]
(*((E1)+(E2))
相同。