| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1083 人关注过本帖
标题:指出kai对二维数组指针的错误理解
只看楼主 加入收藏
fanglinyuan
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2005-9-12
收藏
 问题点数:0 回复次数:3 
指出kai对二维数组指针的错误理解

对于这样的一个 指针:int (* p)[3]; kai在回答前面一位的疑惑时有些说法是错误的 int (* p)[3] 应该是指向具有3个元素的一维数组的指针,而不是指向二维数组的指针 如编译这样的情况: int a [2][3] = { {1,2,3}, {4,5,6} }; int (* p)[3] = a; //正确 int (* p)[3] = &a[0]; //正确 int (* p)[3] = &a[0][0]; //编译错误:cannot convert from 'int *' to 'int (*)[3] 如果要用这个指针来访问a[i][j]的元素时候 可以有两种方式:1 : *(p[i]+j) 2 : *(*(p+i)+j) 这两种得到的结果都是一样的,都等于a[i][j]的值 下面看看程序执行结果: #include <iostream> using namespace std;

int main() { int i = 0, j = 0, k = 0; // manipulate data with two dimensional array through pointer cout<<"manipulate data with two dimensional array through pointer"<<endl; int a [2][3] = { {1,2,3}, {4,5,6} }; int (* p)[3] = &a[0]; for(i = 0; i<2; i++) { for(j = 0; j<3; j++) { cout<<*(*(p+i)+j)<<" "; } cout<<endl; } cout<<endl;

for(i = 0; i<2; i++) { for(j = 0; j<3; j++) { cout<<*(p[i]+j)<<" "; } cout<<endl; } cout<<endl; } 打印出的结果为: manipulate data with two dimensional array through pointer 123 455 123 456 这个说明 int (*b)[3]确实指向了一个一维数组,在这里一共有2个一维数组,每个数组都 有3个元素,因此,这个指针加1就开始指向了第二个一维数组,即a[1][0]; 下面用图表来表示在内存里面的数据分布情况 b值 *b值 **b值 b: 100 200(内存地址是100) 1 (内存200处的数据) 101 203 (内存地址是101) 2 3 4(内存203处的数据) 5 6 所以a[1][2] 这个数据是6,可以这样表示*(b+1)即等于203,然后 (*(b+1)+2)等于206,所以*(*(b+1)+2)等于6 也可以这样b[i]等于指向第 i 个一维数组 ,所以b[1]等于203 然后b[1]+2等于206,所以*(b[1]+2)==*(*(b+1)+2)==b[1][2]==6; 以上只是我的一些见解,请大家指教

搜索更多相关主题的帖子: kai 指针 
2005-09-12 16:58
zorro2zzz
Rank: 1
等 级:新手上路
威 望:1
帖 子:96
专家分:0
注 册:2005-9-11
收藏
得分:0 
有道理,看kai怎么说……

编程是啥东西,让俺瞧瞧……
2005-09-12 17:17
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
收藏
得分:0 
原贴呢?发这样的贴怎么不给原贴的链接?

九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2005-09-12 20:14
kai
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:52
帖 子:3450
专家分:59
注 册:2004-4-25
收藏
得分:0 
http://bbs.
原贴在这里,幸好我的记性还可以,要不然真的说不清了。

一维数组,二维数组,以及多维数组,动态开辟空间,包括多维数组的动态开辟空间,最近的帖子里我都给了答复,楼主还是自己慢慢看看吧,不过我也不反对讨论问题,如果我确实说错了,改正错误也是应该的。

其实指针并没有什么可怕的,认清楚了一点就是一个地址而已。关键的是我们要知道,这个地址下放的内容和其数据类型,这样就可以操作该指针了。

自由,民主,平等,博爱,进步.
中华民国,我的祖国,中华民国万岁!中华民国加油!
本人自愿加入中国国民党,为人的自由性,独立性和平等性而奋斗!
2005-09-12 23:01
快速回复:指出kai对二维数组指针的错误理解
数据加载中...
 
   



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

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