
main() {int a[2][4]={1,2,3,4,5,6,7,8}; int (*pa)[4]=a; printf("%d,%d",*(*(pa+1)+2),pa[1][3]); }
1个回答
展开全部
//整理一下源码如下
#include <stdio.h>
int main() {
int a[2][4]={1,2,3,4,5,6,7,8};
int (*pa)[4]=a;
printf("%d,%d",*(*(pa+1)+2),pa[1][3]);
return 0;
}
问题的关键是要理解 *pa是什么类型,它是一个 int [4]的类型。
*(pa+1) //因为pa是 int [4]的类型,所以+1 实际上就是 数组a[1][0]的位置。
*(pa+1)+2 //pa是int [4]的类型,但是 *pa却是int类型啊。所以,*(pa+1)+2 实际上指向的是 a[1][2]的地址,所以,它的值是7。
pa[1][3] 也就是a[1][3]的值,就是8啊。
关键的问题要理解 数组指针,理解的时候记得把*和标识符去掉。
int (*pa)[4]=a; //去掉后
int [4] //就是4个int元素的类型。。这种类型在C语言标准中有一个学名叫 —— 抽象说明符。你可以下载一个 ANSI C标准或者 C99标准 仔细阅读一下。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询