| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3331 人关注过本帖
标题:C++函数返回数组输出问题
取消只看楼主 加入收藏
ooole
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2009-7-2
结帖率:66.67%
收藏
已结贴  问题点数:5 回复次数:8 
C++函数返回数组输出问题
代码如下:
#include<iostream>
using namespace std;
int *test()
{
    int arr[] = {1,2,3,4,5};
    for(size_t i = 0 ; i < 5 ; ++i)
    {
        cout << &arr[i] << "\t" << arr[i] << endl;
    }
    return arr;
}
int main()
{
    int *p = test();
    for(size_t i = 0; i < 5 ; ++i)
    {
        cout << p << "\t" << *p <<endl;
        p = p + 1;
    }
    return 0;
}
在主函数里输出的时候只有第一个元素的输出是正确的,后面的四个元素都输出错误,而且后面四个元素每次的输出还不一样。请问这是怎么回事?
在test函数和主函数里输出的地址是一样的。

[ 本帖最后由 ooole 于 2010-7-23 13:12 编辑 ]
搜索更多相关主题的帖子: 输出 函数 
2010-07-23 13:10
ooole
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2009-7-2
收藏
得分:0 
回复 4楼 tianxiao110
我觉得p指的的应该是数组的首地址,因为我在test()打印的地址,和主函数里打印的地址是一样的
2010-07-24 09:02
ooole
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2009-7-2
收藏
得分:0 
回复 2楼 mxs810
我觉得P+1不是非法操作,因为我运行下面的语句得到的是正确的结果
p = p + 1;
cout << *p << endl;

p = p + 3;
cout << *p << endl;
这两种情况下的输出都是正确的
2010-07-24 12:01
ooole
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2009-7-2
收藏
得分:0 
回复 5楼 pangding
我按照你的提示自己研究了下,我觉得可能是作用域的问题,因为我将数组定义为全局变量后得到的结果是正确的,那可能就是,数组在调用完test函数后被撤消了,如果撤销的话那么应该所有的值都是错误的,但是我输出的时候第一个值是正确的,所以这个地方还有点疑惑
2010-07-24 12:04
ooole
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2009-7-2
收藏
得分:0 
回复 3楼 mxs810
不太明白你的意思,可以进一步解释下吗?
2010-07-24 12:05
ooole
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2009-7-2
收藏
得分:0 
回复 10楼 南国利剑
运行正常!按照我以前的做法在打印出第一个数组元素后整个数组空间都被撤销,所以后面的输出是错误的,而用动态数组的话如果不去释放空间那么数组中的元素就一直存在,直到程序运行完,不知道这样理解对不对,如果正确的话就可以结贴了!
2010-07-25 09:46
ooole
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2009-7-2
收藏
得分:0 
回复 11楼 tianxiao110
恩,我现在的理解和你差不多,不过我认为数组的撤销是发生在p的第一次输出之后,不管输出的是p+1的值还是p+2的值
2010-07-25 09:50
ooole
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2009-7-2
收藏
得分:0 
回复 13楼 mxs810
恩,谢谢,分析的很到位
2010-07-25 09:51
ooole
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2009-7-2
收藏
得分:0 
回复 14楼 pangding
就是说如果我打印*p则得到的是1,如果我打印*(p+2)则得到的是3,但是如果第一次打印的是*p得到正确结果,再去打印别的比如*(p+3)则得到的是错误结果,如果第一次打印*(p+2)得到的是正确的结果,然后再去打印别的比如*p则得到的是错误的结果,而且错误的结果是变化的不是固定值。
2010-07-25 09:58
快速回复:C++函数返回数组输出问题
数据加载中...
 
   



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

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