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]); }

请写出输出结果并且分析过程,定义的第二个整形和输出看不懂谢谢... 请写出输出结果
并且分析过程,定义的第二个整形和输出看不懂
谢谢
展开
 我来答
吉祥二进制
高粉答主

2015-01-12 · 科技改变生活,生活改变科技。
吉祥二进制
采纳数:33922 获赞数:84610

向TA提问 私信TA
展开全部
//整理一下源码如下 
#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标准 仔细阅读一下。

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式