返回指针和返回引用的问题

讨论下所谓的桟内存和桟引用不能返回的问题:
桟中的内存存放的是函数运行时候的局部变量,在函数结束后,桟中的内存就会释放,桟中的变量包括函数实参和局部变量,在此应该注意在函数中用new动态分配的内存不会因为函数的结束而释放,因此可以返回其指针。
(注意:当返回桟中变量的指针和引用的时候,可以通过编译,编译过程只是提示警告信息,但是当运行时会出现错误)。
以下提供几种正确或者错误的例子。

变量非动态分配时,返回桟中的指针,运行时出错。
#include <iostream.h>
#include <stdlib.h>

char *get()

  char *nn;
  *nn='d';
  return nn;
}

int main()
{
  char *bb;
  bb=get();
  cout <<bb<<endl;
}

当动态分配内存的时候,可以返回桟中的指针,运行正确。
#include <iostream.h>
#include <stdlib.h>

char *get()

  char *nn=new char;
  *nn='d';
  return nn;
}

int main()
{
  char *bb;
  bb=get();
  cout <<bb<<endl;
}

返回实参的指针,由于实参也是桟中的变量,提示出错。
#include <iostream.h>
#include <stdlib.h>

char *get(char *pp)

  *pp='d';
  return pp;
}

int main()
{
  char *bb,*aa;
  bb=get(aa);
  cout <<bb<<endl;
}

返回实参的引用,运行正确。
#include <iostream.h>
#include <stdlib.h>

char &get(char &pp)

  pp='d';
  return pp;
}

int main()
{
  char bb,aa;
  bb=get(aa);
  cout <<bb<<endl;
}

返回局部变量的引用,虽然编译的时候有warning:reference to local variable 'pp'returned,但是运行正确。我认为此时是用于变量中的数据还没有被改写,所以可以读出正确数据,但由于此片内存已经被释放,所以其中数据随时有可能被改写。

总结,不管是指向实参的指针还是指向局部变量的指针都可以返回,指向实参的引用可以返回,指向局部变量的引用不可以返回。我认为原因是实参的指针只是一个备份,所以变量从桟中开辟,而实参的引用却是指向变量的引用,变量在函数外面已经开辟,所以不会因为函数的结果而释放,所以可以返回。
 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值