![](https://cos-cdn.shuashuati.com/pipixue-wap/2020-1230-1107-53/ti_inject-812ce.png)
分析下面的程序 , 比较二维数组元素 (*(p+i))[j] 与 *(p+i)[j] 的区别。 #include
int main( ) { int a[4][3]={1,2,3, 4,5,6, 7,8,9, 10,11,12}; int (*p)[3]=a; //a 是二级地址 ,p 是指向数组的指针 int i,j,s1=0,s2=0; for(i=0;i<2;i++) //*(p+i) 是一级地址 , 即第 i 行行指针 for(j=0;j<3;j++) { s1=s1+(*(p+i))[j]; // 运算符 “[]” 的优先级高于运算符 “*” s2=s2+*(p+i)[j]; } // 先求数组元素的行下标和列下标 , 再取该数组元素的值 printf("s1="); for(i=0;i<2;i++) for(j=0;j<3;j++) printf("%d+",(*(p+i))[j] ); printf("\b=%d\n",s1); printf("s2="); for(i=0; i<2; i++) for(j=0; j<3; j++) printf("%d+",*(p+i)[j] ); //*(p+i)[j] 与 *((p+i)[j]) 等价 printf("\b=%d\n",s2); return 0; } 执行后输出的结果 :