| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3331 人关注过本帖
标题:C++函数返回数组输出问题
只看楼主 加入收藏
ooole
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2009-7-2
结帖率:66.67%
收藏
已结贴  问题点数:5 回复次数:22 
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
mxs810
Rank: 9Rank: 9Rank: 9
来 自:火星
等 级:贵宾
威 望:16
帖 子:234
专家分:1122
注 册:2006-10-19
收藏
得分:0 
int *test()
{
}
返回值就是一个int型的指针,
也就是说    int *p = test();
返回的p,只有*p是有意义的,后面的p = p + 1你那是非法操作~~

授人以鱼不如授人以渔
2010-07-23 13:34
mxs810
Rank: 9Rank: 9Rank: 9
来 自:火星
等 级:贵宾
威 望:16
帖 子:234
专家分:1122
注 册:2006-10-19
收藏
得分:0 
test的定义,建议声明称这样
bool test (int nTest[5]);

授人以鱼不如授人以渔
2010-07-23 13:36
tianxiao110
Rank: 1
等 级:新手上路
帖 子:63
专家分:1
注 册:2010-7-23
收藏
得分:0 
估计是这里错了:
程序的运行从 main 开始,首先执行这句int *p = test();  但是你可能忽略了,arr[]数组的内存是动态分配的,执行完一次test()内存会从新分配;因此执行完test()之后,p指的就不是数组的首地址了。

2010-07-23 19:36
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
这种在栈上分配内存的方法我们一般不叫动态分配。

楼主这个是个典型的错误,你可以跟踪一下程序,看看是怎么回事。上网查查资料,看能不能自己研究出来~
2010-07-23 23:53
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
南国利剑
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:29
帖 子:1165
专家分:3536
注 册:2010-4-12
收藏
得分:0 
回复 9楼 ooole
你的程序稍微做修改就没有问题了。这是我改的,我试过了,没有问题。
程序代码:
#include<iostream>
using namespace std;

int *test();

int main()
{
    int *p = test();
    int *n=p;
    for(size_t i = 0; i < 5 ; ++i)
    {
        cout << p << "\t" << *p <<endl;
        p = p + 1;
    }
    delete [] n;
    return 0;
}


int *test()
{
    int* arr=new int[5];
    for(int j=1,k=0;k<5;++j,++k)
        arr[k]=j;

    //int arr[] = {1,2,3,4,5};
    for(size_t i = 0 ; i < 5 ; ++i)
    {
        cout << &arr[i] << "\t" << arr[i] << endl;
    }
    return arr;
}

 

南国利剑
2010-07-24 14:10
快速回复:C++函数返回数组输出问题
数据加载中...
 
   



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

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