| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 590 人关注过本帖
标题:关于指针的一个问题,高手指点:
只看楼主 加入收藏
dianziwg
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2004-11-17
收藏
 问题点数:0 回复次数:6 
关于指针的一个问题,高手指点:
#include <stdio.h>

main()
{int a[2][3]={1,2,3,4,5,6};
int *p1,(*p2)[3];
p1=a[0];
for (;p1<a[0]+6;p1++)
printf("%4d",*p1);
printf("\n");
p2=a;
for(;p2<a+2;p2++)
printf("%4d",*(*p2));
}
结果是显示
1 2 3 4 5 6
1 4


以上程序是书中的一个例题,使用不同指针类型定位一个二维数组,第一个循环中的p1<a[0]+6结束循环自己能理解,但下面的p2<a+2结束循环无法理解,(我是这么理解:循环开始时,P2指向a[0][0],那p2肯定小于a+2,所以应该退出循环,怎么会显示出1,尔后自加后指向a[1][0],同样条件不符合,也不该显示4的啊)

望高手指点!!!多谢
搜索更多相关主题的帖子: 指针 
2008-08-26 21:17
flyue
Rank: 10Rank: 10Rank: 10
来 自:江南西道
等 级:贵宾
威 望:19
帖 子:3465
专家分:1563
注 册:2006-6-20
收藏
得分:0 
单步跟踪调试,程序执行每步时都停下来,仔细查看变量的值。
知道了怎么调试应该很容易理解程序做了些什么

天之道,损有余而补不足.人之道则不然,损不足以奉有余.孰能有余以奉天下,唯有道者.
2008-08-26 21:26
dianziwg
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2004-11-17
收藏
得分:0 
只能看到P2地址的变化,所以无法理解它退出循环的原因!!
!!!!!!!!!!!!
2008-08-26 21:59
f319
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2008-5-13
收藏
得分:0 
循环开始时,P2指向a[0][0],那p2肯定小于a+2,所以应该退出循环,怎么会显示出1,尔后自加后指向a[1][0],同样条件不符合,也不该显示4的啊

这里理解错误了,  循环条件是符合的.
2008-08-26 23:54
hudiedenahan
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2008-8-1
收藏
得分:0 
include <stdio.h>

main()
{int a[2][3]={1,2,3,4,5,6};
int *p1,(*p2)[3];    //p2是行指针
p1=a[0];
for (;p1<a[0]+6;p1++)
printf("%4d",*p1);
printf("\n");
p2=a;                    p2开始指向0行的首地址
for(;p2<a+2;p2++)   
printf("%4d",*(*p2));      
}                       第一次循环输出第0行第0列的值,由于p2是行指  针,所以加1后,p2指向第一行的首地址,故第二次 循环后输出第1行第0列的值。回答完毕。不知道解释的对不,呵呵
2008-08-27 00:03
csynyk
Rank: 1
等 级:新手上路
威 望:1
帖 子:114
专家分:0
注 册:2008-8-9
收藏
得分:0 
int *p1,(*p2)[3];   
 //此处定义了*p2的类型是int [3],表示*p2的类型宽度是3*sizeof(int),即3个整形值的长度
......
for(;p2<a+2;p2++)    //p2每自加一次,其地址将增加3*sizeof(int)
  printf("%4d",*(*p2));
//没有开始增加的时候*p2=a,即第一个数a[0][0]的地址
//第一次增加以后*p2=a[0][3],即a[2][1]的地址,此时**p2=4
//第二次增加就不满足循环的条件了。其实此时也超出数组的范围了!

http://blog./csynyk
2008-08-27 00:09
dianziwg
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2004-11-17
收藏
得分:0 
非常感谢楼上几位高手解答!!
从改换循环条件看,csynyk兄的答案正解,看样子看书不够用功,理解出现偏差!!望楼上各位以后多多指教啊!!
2008-08-27 21:32
快速回复:关于指针的一个问题,高手指点:
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.034150 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved