C语言中指针与二维数组的问题!

指针与二维数组!声明一个int型的二维数组a[2][3],并将起始值指定给指针变量*pia:inta[2][3];int*pia=&a[0][0];如果要使用指针变量*p... 指针与二维数组!

声明一个int型的二维数组a[2][3],并将起始值指定给指针变量*pia:
int a[2][3];
int *pia=&a[0][0];
如果要使用指针变量*pia来存取二维数组中的第i列第j行元素,也就是a[i][j].可以使用以下公式来取出该元素的值.
*(pia+i*3+j);
例如:
#include <stdio.h>
#include <stdlib.h>
void main()
{
int a[2][3]={{1,2,3},{4,5,6}};
int *pia=&a[0][0];
int i,j;

for(i=0;i<2;i++)
for(j=0;j<3;j++)
printf("%d\t",*(pia+i*3+j));
putchar('\n');
system("pause");
return 0;
}
那么公式*(pia+i*3+j)到底是什么意思呢?
为什么要乘以3呢?到底*是取值还是乘号?
一直看不懂这个公式,麻烦高手详细解答一下吧,求知!
一定要详细哟,我老笨老笨的啦.....
展开
 我来答
梦想窗外
2009-06-11 · TA获得超过1588个赞
知道大有可为答主
回答量:1180
采纳率:0%
帮助的人:1548万
展开全部
第一个*表示解引用,即取指针指向的值。
i表示行号,j表示列号,并且都是从0开始取值,乘3表示每行3个元素。举个例子,假定i等于0, j等于2,i*3+j=2,计算结果就是第一行的最后一个元素,最后将数组的首地址加上数据的偏移从而得到数据的地址。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
趁影源BZ
2009-06-11 · 超过41用户采纳过TA的回答
知道小有建树答主
回答量:187
采纳率:0%
帮助的人:109万
展开全部
公式*(pia+i*3+j)的意思就是a[i][j]的意思 二维数组是矩阵排列的 在内存空间里面是先存第一行 再存第二行 以次类推(内存空间是一条链的形式) 行为i列为j 第0行就是0*i 然后加上j的数值 第1行就是1*i 然后加上j 所以 一样可以定位
3*i的*是乘号
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
pure__boy
2009-06-12 · TA获得超过271个赞
知道答主
回答量:82
采纳率:0%
帮助的人:63.1万
展开全部
pia+i*3+j是地址,代表从首元素开始第i*3+j个元素的地址,pia指向的a[2][3],一行有3个元素,所以a[i][j]的地址是pia+i*3+j,前面*是取内容!pia为int型,pia每加1代表地址加2,就是加了一个元素的地址
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Draconious
2009-06-11 · TA获得超过6242个赞
知道大有可为答主
回答量:2142
采纳率:0%
帮助的人:2560万
展开全部
*(pia+i*3+j)指读取从pia开始第i*3+j个位置的值。
因为你的a是一个2×3的数组,也就是a[i]代表一个有着三个元素的整数数组。在内存里二维数组是按照从高到低从左到有的顺序连续排列的,以你的数组为例:
1 2 3
4 5 6
那么在内存里这些的排列顺序就是1 2 3 4 5 6,而pia所指的就是1的位置。
所以i*3+j就给出了从数组开头第i*3+j个元素的位置,也就是a[i][j]的位置。

如果*是放在数字变量和常量的中间,它就代表乘号。如果放在一个指针变量的前面就代表提取符,pia+i*3+j给出了一个新的指针,用*提出它所指的值。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
惜茶人
2009-06-11
知道答主
回答量:21
采纳率:0%
帮助的人:0
展开全部
第一个*是取里面的值 第二是乘
你不是定义了 a[2][3]嘛 意思就是两行三列
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式