1、对于二维数组a[3][5]
a可以理解为二重指针,a[0]理解指针,a[0][0]是对这个地址进行访问了。
其实[ ]的意义 可以理解成* 。
a[ i ]其实就相当于*(a+i) 所以原来的就相当于 *(*(a+i)+j) +的优先级比 *的高 所以外面那个括号可以去掉 就变成了 **(a+i)+j 。
2、对于数组指针
例如 int (*p)[5]; p+1的内存跨步为5个int类型.
虽然与二级指针的类型不同,但它们的用法是相似的.
int a[2][5]={1,2,3,4,5,6,7,8,9,10};
int (*p)[5]=a; //定义一个数组指针指向一个二维数组的地址
printf("a[0][4] =%d\n",a[0][4]);
printf("*((*a)+4) =%d\n",*((*a)+4));
printf("*((*p)+4) =%d\n",*((*p)+4));
运行结果: