c语言指针数组问题

通常可用一个指针数组来指向一个二维数组。指针数组中的每个元素被赋予二维数组每一行的首地址,因此也可理解为指向一个一维数组。inta[3][3]={1,2,3,4,5,6,... 通常可用一个指针数组来指向一个二维数组。 指针数组中的每个元素被赋予二维数组每一行的首地址, 因此也可理解为指向一个一维数组。
int a[3][3]={1,2,3,4,5,6,7,8,9};
int *pa[3]={a[0],a[1],a[2]};
int *p=a[0];
main(){
int i;
for(i=0;i<3;i++)
printf("%d,%d,%d\n",a[i][2-i],*a[i],*(*(a+i)+i));
for(i=0;i<3;i++)
printf("%d,%d,%d\n",*pa[i],p[i],*(p+i));
}
最后一行输出语句中 p[i],和*(p+i)是哪里冒出来的 真是不解(明明在说明时候指针数组名就是pa) 会冒出个p
冒出来了又表示什么含义 麻烦用一些理论性知识来告诉我 谢谢啦 想明白了 我再上机看结果
展开
 我来答
百度网友50cab7a
2013-03-05 · TA获得超过504个赞
知道小有建树答主
回答量:320
采纳率:0%
帮助的人:171万
展开全部
int *p=a[0];

这里不是有定义了一个指针并初始化指向了a[0]吗
p[i] 和 *(p+i) 都表示 a[0][i] 因为数组本质的表达式是 *(a[0]+i) 也就是该元素加上变偏移地址
就等于所要求的元素地址 a[0][i] 是简便的表示方法 由此推出 p[i] 等于 *(p+i) 而p指向 a[0]
所以和上边的等价

只要记得 二维数组只不过是个指向数组的数组 所以本质他还是一个一维数组
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
cpucash
2013-03-05 · TA获得超过1584个赞
知道小有建树答主
回答量:1457
采纳率:66%
帮助的人:971万
展开全部
这个题目比较蛋疼,但是只要理解指针,其实也不难理解
就是手工计算繁琐一点

二维数组,相当于两层指责你,**
*(*(a+i)+j)这个表示第i行第j个元素的值,。如果不理解,记住即可
有两个*,是两层指针
pa看了你没问题
关键是p

p在程序中有定义,在pa的后面
a a[0] &a[0][0]这三个指针虽然只想同一个地方,是a首地址的值,但是用起来是不一样的
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
cdyzxy
2013-03-05 · TA获得超过2.1万个赞
知道大有可为答主
回答量:1.4万
采纳率:85%
帮助的人:3756万
展开全部
int *p=a[0];相当于变量p存放a数值的首地址,如p=&a[0][0];可用于顺序访问a数值。
p[i]就相当于a[i],也是*(p+i)。具体地址计算是,先取变量p存储的地址(a的首地址),
然后加上i*sizeof(int)个字节的偏移,相当于在a中找到第i个int取出。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
飞花的月
2013-03-05 · TA获得超过324个赞
知道答主
回答量:60
采纳率:0%
帮助的人:50.5万
展开全部
当指针变量指向数组元素时,指针变量可以带下标,p=a[0],故p[i]=a[0][i];*(p+1)也是代表a[o][i],其实你只要弄明白二维数组是怎样存储的,遇到这类问题就可以迎刃而解了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
左高原2D
2013-03-05
知道答主
回答量:61
采纳率:0%
帮助的人:21.5万
展开全部
他们的意义都是指同一个东西,同一块内存表现的形式不同;
前者是表明要指针数组的第i个元素的地址;后者是要p的地址的移动i个int 指针类型后的位置上的数据
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式