输出二维数组任一行任一列元素的值

main(){inta[3][4]={{1,3,5,7},{9,11,13,15},{17,19,21,23}};int(*p)[4],i,j;p=a;scanf(“%d... main( )

{

int a[3][4]={ {1,3,5,7}, {9,11,13,15},

{17,19,21,23} };

int (*p)[4], i, j ;

p=a;

scanf(“%d , %d”, &i,&j);

printf(“a[%d][%d]=%d\n”,i,j,*(*(p+i)+j));

}
问:p必须定义为(*p)[4]?可以直接定义为*p?为什么?定义为(*p)[4],和*p有什么区别?
展开
 我来答
乡红百3
2011-09-09 · TA获得超过190个赞
知道小有建树答主
回答量:107
采纳率:100%
帮助的人:130万
展开全部
这个是指针与数组结合的问题,你要弄明白得看这方面的内容。你代码中的p指针被定义为行指针,它是一个二级指针地址,它指向数组首地址的方式只有p=a;这一种,若是定义为int *p;则p指针被定义为列指针,是一个一级指针地址,它指向数组首地址的方式有:p=*a; p=a[0]; p=&a[0][0]; 因为不同指针指向数组首地址的方式的不同,就使其对数组中元素访问的表达方式也就不一样了。
死后是好人
2011-09-09 · TA获得超过2638个赞
知道小有建树答主
回答量:628
采纳率:0%
帮助的人:966万
展开全部
(*p)[4]是列数为4的二维数组,你可以理解为有p这么一个数组,他里面的每一个元素都是一个列数为4的数组
*p是一维数组
你的a是二维的,所以要这么定义才能p=a;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
TUSSON
2011-09-09 · 超过19用户采纳过TA的回答
知道答主
回答量:85
采纳率:0%
帮助的人:55万
展开全部
int (* pz)[2]; // pz points to an array of 2 ints

This statement says that pz is a pointer to an array of two ints. Why the parentheses? Well, [ ] has a higher precedence than *. Therefore, with a declaration such as

int * pax[2];

you apply the brackets first, making pax an array of two somethings. Next, you apply the *, making pax an array of two pointers. Finally, use the int, making pax an array of two pointers to int. This declaration creates two pointers to single ints, but the original version uses parentheses to apply the * first, creating one pointer to an array of two ints.

参考资料: <c primer plus fifth edition > charpter 10

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式