| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 743 人关注过本帖
标题:指针问题
只看楼主 加入收藏
水汀飘落
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2004-7-22
收藏
 问题点数:0 回复次数:5 
指针问题

static int a[2][3]={1,2,3,4,5,6},(*pa)[3];

int i,j;pa=a;

for (i=0;i<2;i++)

for (j=0;j<3;j++)

printf("%3d",pa[i][j]);

}

这个程序输出结果是1 2 3 4 5 6。我不明白的是此处指针定义int (*pa)[3]。这是什么意思。能不能利用这个程序给我详解下这个。谢谢各位

搜索更多相关主题的帖子: 指针 
2004-07-26 17:25
幽深
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2004-7-5
收藏
得分:0 

int (*pa)[3]是指针数组,就是一大堆指针

int *pa[3]是数组指针,就是指向数组的指针,是一个指针

好象是这么回事


如果将英文字母A到Z分别编上1—26的分数,(A=1,B=2,...Z=26)那么: 知识(knowledge)得到96分(11+14+15+23+12+5+4+7+5=96) 努力(hardwork)也只得98分(8+1+18+4+23+15+18+11=98) 态度(attitude)才是左右生命的全部(1+20+20+9+20+21+4+5=100)
2004-07-26 18:13
神vLinux飘飘
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:浙江杭州
等 级:贵宾
威 望:91
帖 子:6140
专家分:217
注 册:2004-7-17
收藏
得分:0 

要更正楼上的说法,楼上恰恰说反了*p[3]才是指针数组 而 (*p)[3] 才是数组指针,而且是指向二维数组的指针。

首先说明啊,这个帖子是给菜鸟看的,已经懂得了的朋友看坏了脑袋不要怪我~因为这些方法是我在自己看的时候想出来的~原创~也许还是错误的呢~但是他能帮你很快地理解二维数组的指针怎么用~

首先,为了更加好的向你阐述我的想法,必须要改动一下你的题目:(*pa)[3] 改为(*pa)[2]

main() { static int a[2][3]={1,2,3,4,5,6},(*pa)[2]; int i,j;pa=a; for(i=0;i<2;i++) for(j=0;j<3;j++) printf("%3d",pa[i][j]); }

a[2][3] 的数据想象图 [0] [1] [2] a[0] 1, 2, 3 a[1] 4, 5, 6

(*pa)[2] 的数据想象图 [0] [1] pa[0] 1, 2 pa[1] 3, 4 pa[2] 5, 6

你可以在脑子里面把指针pa这样来看。

然后我们分析一下程序: i=0时: j=0, 输出pa[0][0],也就是1啦 j=1, 输出pa[0][1] 2 j=2, 输出pa[0][2],惨了,我们没有pa[0][2]啊!这个时候,pa[0][2]就要向后推一位,也就是说:pa[0][2]和pa[1][0]是等价的。所以输出3。

i=1时: j=0, 输出pa[1][0],也就是3啦 j=1, 输出pa[1][1] 4 j=2, 输出pa[1][2],通理,由于没有pa[1][2],所以就往后推一位,输出5

整个程序输出的就是 1 2 3 3 4 5

[此贴子已经被作者于2004-07-26 20:37:39编辑过]


淘宝杜琨
2004-07-26 20:32
神vLinux飘飘
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:浙江杭州
等 级:贵宾
威 望:91
帖 子:6140
专家分:217
注 册:2004-7-17
收藏
得分:0 

然后我们再回过头来看原题目: main() { static int a[2][3]={1,2,3,4,5,6},(*pa)[3]; int i,j;pa=a; for(i=0;i<2;i++) for(j=0;j<3;j++) printf("%3d",pa[i][j]); }

a[2][3] 的数据想象图 [0] [1] [2] a[0] 1, 2, 3 a[1] 4, 5, 6

(*pa)[3] 的数据想象图 [0] [1] [2] pa[0] 1, 2, 3 pa[1] 4, 5, 6

两个的图是一样的,这也是一开始我要改程序的原因——为了更好的理解

然后我们同样分析一下程序: i=0时: j=0, 输出pa[0][0],也就是1啦 j=1, 输出pa[0][1] 2 j=2, 输出pa[0][2], 3 i=1时: j=0, 输出pa[1][0],也就是4啦 j=1, 输出pa[1][1] 5 j=2, 输出pa[1][2], 6

所以,程序输出的就是 1 2 3 4 5 6 啦


淘宝杜琨
2004-07-26 20:32
水汀飘落
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2004-7-22
收藏
得分:0 

太谢谢了。书上没有讲。也不太知道你这错对,但是挺有道理。就是对的。

你可以出书了。大虾

2004-07-27 16:15
mikewolf
Rank: 1
等 级:新手上路
帖 子:175
专家分:0
注 册:2004-7-3
收藏
得分:0 
2004-07-27 16:32
快速回复:指针问题
数据加载中...
 
   



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

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