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



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

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