c/c++返回值为指针、引用时注意的地方

8 篇文章 1 订阅

全局变量,局部静态变量,局部动态分配变量 都可以作为函数返回值。
但是,局部自动变量不能作为函数返回值。

int& func()
{
    static int i=10;   //因为是全局的静态区 可以返回

    i++;

    return i; 
}
int *getint()
{
   int p=10;
   return &p;//提示返回临时变量
}
int *getint2()
{
    int *p=(int*)malloc(sizeof(int)*10);
    *p=10;
    return p;
}

int &getint3()
{
    int p=10;
    return p;//提示返回临时变量
}
int &getint4()
{
    int *p=(int*)malloc(sizeof(int)*10);
    *p=10;
    *(p+1)=15;
    return *p;
}


int main()
{
    //测试返回函数
    cout<<"getint() "<<*getint()<<endl;  
    int *ptr=getint2();
    cout<<"getint2() "<<*ptr<<endl;
    free(ptr);
    cout<<"getint3() "<<getint3()<<endl;
    int *ptr2=&getint4();
    cout<<"getint4() "<<*(ptr2+1)<<endl<<endl;//
    free(ptr2);
    cout<<"getint4() "<<*(ptr2+1)<<endl<<endl;//

    system("pause");
    return 0;
}

这里写图片描述

可以看出来,函数内部等局部变量,存储在栈中的变量是不能作为返回值的,虽然可以读取正确的值,但是这是一块未分配的内存,当别的进程用到时就会出错,这个指针相当于野指针。返回值可以是局部动态分配的内存空间,这一部分分配在堆上,在主动释放之前别的进程是无法使用的内存区域。

不管是指针还是引用都是如此。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值