| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1399 人关注过本帖
标题:函数返回指针为局部变量的问题,谁教我一招吧
只看楼主 加入收藏
crazycoder
Rank: 1
来 自:长春
等 级:新手上路
帖 子:36
专家分:0
注 册:2008-11-20
收藏
 问题点数:0 回复次数:4 
函数返回指针为局部变量的问题,谁教我一招吧
// 以如下程序为例:
#include <iostream>
using namespace std;
const int array_size = 10;

int * f()
{
    int A[array_size];
    for(int i = 0; i < array_size; i++)
    {
        A[i] = i * 10;
    }
    return A;
}

int main()
{
    int *p = f();
    cout << p[array_size - 1] << endl;

    return 0;
}

编译时只是有一个警告:“warning C4172: returning address of local variable or temporary”
输出结果是90,不是应该出错才对吗? 为什么局部变量也能返回? 局部变量是什么时候释放的?谢谢。。
搜索更多相关主题的帖子: 局部 函数 指针 变量 
2008-11-23 16:49
debroa723
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:23
帖 子:862
专家分:1954
注 册:2008-10-12
收藏
得分:0 
int * f()
{
    int* A = new int[array_size];
    for(int i = 0; i < array_size; i++)
    {
        A[i] = i * 10;
    }
    return A;
}

int main()
{
    int *p = f();
    cout << p[array_size - 1] << endl;

    if(p!=NULL) delete [] p ;
    return 0;
}

局部变量的地址是可以返回的,但不安全,不安全的内存空间,在作用域外可能被其它的局部变量覆盖.
2008-11-23 18:58
asd6791868
Rank: 1
来 自:逆流
等 级:新手上路
帖 子:362
专家分:7
注 册:2008-7-27
收藏
得分:0 
int *p = f();
这样对么??
int (*p)()=&f();

─條路 :  ┈片天  ┈個人  ─瞬間:
2008-11-23 19:14
crazycoder
Rank: 1
来 自:长春
等 级:新手上路
帖 子:36
专家分:0
注 册:2008-11-20
收藏
得分:0 
感谢版主debroa723喽

Breath deeply, three times a day, hold on for one year----我要说的是:坚持真的是件很难的事。
2008-11-23 19:55
crazycoder
Rank: 1
来 自:长春
等 级:新手上路
帖 子:36
专家分:0
注 册:2008-11-20
收藏
得分:0 
对于3楼的问题,p不是一个指向函数的指针,它是一个指向int型变量的指针。调用上面程序里的f()函数,会返回一个int型的指针,把这个指针赋给p。

Breath deeply, three times a day, hold on for one year----我要说的是:坚持真的是件很难的事。
2008-11-23 20:01
快速回复:函数返回指针为局部变量的问题,谁教我一招吧
数据加载中...
 
   



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

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