| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3331 人关注过本帖
标题:C++函数返回数组输出问题
只看楼主 加入收藏
saynotolx
Rank: 2
等 级:论坛游民
帖 子:11
专家分:13
注 册:2010-7-26
收藏
得分:0 
顶顶顶顶顶!
2010-07-26 17:22
zhoufeng1988
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:北京
等 级:贵宾
威 望:27
帖 子:1432
专家分:6329
注 册:2009-5-31
收藏
得分:0 
程序代码:
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;
}

小 哥,arr这个指针所指向的内存是调用test函数自动分配的,函数调用完了就释放了。你这种返回指针的做法是不好的。
你可以在
  int arr[] = {1,2,3,4,5};

前,加一个static,应该就不会出现你所说的问题 了。
2010-07-26 17:35
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
嗯,加个 static 就静态的了,存在数据段里。跟程序共存亡的,比堆分配的内存生命期还长。

不过它只在程序加载的时候初始化一次,有的时候用它不一定能达到目的。比较下面两个代码:
程序代码:
void test()
{
    int arr[] = {1,2,3,4,5};    /* static int arr[] = {1, 2, 3, 4, 5 }; */
    int i;
    for(i = 0 ; i < 5 ; i++)
    {
        cout << "a[" << i << "] = " << arr[i] << endl;
    }

    arr[1] += 2;
    for(i = 0 ; i < 5 ; i++)
    {
        cout << "a[" << i << "] = " << arr[i] << endl;
    }
}


没 static 的每次执行都是一样的結果,加了之后每次就不一样了。
如果这不是你期望的結果,那么在看代码时,又可能很难发现错误。所以 static 一般原则上不是很常用(其实是一般不这么用)。
2010-07-26 23:56
快速回复:C++函数返回数组输出问题
数据加载中...
 
   



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

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