| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1209 人关注过本帖
标题:二维数组的读取
只看楼主 加入收藏
y605302737
Rank: 1
等 级:新手上路
帖 子:32
专家分:9
注 册:2013-2-2
结帖率:81.82%
收藏
已结贴  问题点数:20 回复次数:10 
二维数组的读取
大家好,我想请教关于二维数组的问题,在下面代码中为什么可以用p[i]这种方式来输出一个二维数组,谢谢!
程序代码:
#include <iostream>
using namespace std;

void show_arr(int *, int );

int main()
{
    int b[3][3] = {{1,2,3},{4,5,6},{7,8,9}};

    show_arr(&b[0][0],9);

    return 0;
}

void show_arr(int *p , int size)
{
    for(int i = 0; i != size; i++)

        cout<<p[i]<<endl;
}
如果show_arr中的输出用  cout<<*(p+i)<<endl;  这种形式好理解,但是直接用p[i]输出是怎么做到的??


[ 本帖最后由 y605302737 于 2013-8-25 15:07 编辑 ]
搜索更多相关主题的帖子: color 
2013-08-25 15:04
yljyljylj
Rank: 1
等 级:新手上路
帖 子:13
专家分:7
注 册:2013-8-25
收藏
得分:7 
个人认为这个问题是这样的,数组的存储是在不管是几维数组,它在内存的存储空间都是连续的,即内存会自动分配一片连续的内存空间存储数组中的内容,这也是为什么建立数组这种数据类型的原因,即建立一个头指针可以遍历真个数组。你建立一个二维数组,内存的存储空间连续,你又把他的头指针赋给了一个一位数组的指针,肯定可以读出来啊!我也是菜鸟,不知道你清楚了没
2013-08-25 15:33
lzj12530
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:2
帖 子:264
专家分:841
注 册:2013-3-28
收藏
得分:7 
*(p+i)和p[i]代表的就是一个含义

C++菜鸟
2013-08-25 15:51
y605302737
Rank: 1
等 级:新手上路
帖 子:32
专家分:9
注 册:2013-2-2
收藏
得分:0 
数组在内存中连续存放这个没问题,但在子函数show_arr中可以用p[i]这种方法读取,那为什么在main()函中就不能用这种方法呢?
2013-08-25 16:59
yljyljylj
Rank: 1
等 级:新手上路
帖 子:13
专家分:7
注 册:2013-8-25
收藏
得分:0 
??
2013-08-25 20:42
lzj12530
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:2
帖 子:264
专家分:841
注 册:2013-3-28
收藏
得分:0 
int数组和字符数组是有区别的。他们在编译器里面执行的结果是不一样的。所以b[i]这个内容是不一样的

[ 本帖最后由 lzj12530 于 2013-8-25 22:09 编辑 ]

C++菜鸟
2013-08-25 21:50
lzj12530
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:2
帖 子:264
专家分:841
注 册:2013-3-28
收藏
得分:0 
其实你的函数是将二维数组自动转化成为一维数组了,所以能够成功输出。
在你的函数里面已经将b[3][3]转换成为p[9]数组了。由指针分别指向每一个元素。

[ 本帖最后由 lzj12530 于 2013-8-25 22:12 编辑 ]

C++菜鸟
2013-08-25 22:09
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:7 
根据C/C++标准:将二维数组强制转化为一维数组,乃未定义行为
2013-08-26 12:39
y605302737
Rank: 1
等 级:新手上路
帖 子:32
专家分:9
注 册:2013-2-2
收藏
得分:0 
回复 8楼 rjsp
请问下未定行为具体是什么意思,这样将二维数组转换成一维的会不会有什么问题
2013-08-26 15:21
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:0 
以下是引用y605302737在2013-8-26 15:21:10的发言:

请问下未定行为具体是什么意思,这样将二维数组转换成一维的会不会有什么问题
未定义 就是 没有规定这么做会导致怎么样的结果。
换句话说就是:你不能这么做,因为没法保证是正确的。
2013-08-26 15:53
快速回复:二维数组的读取
数据加载中...
 
   



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

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