C语言返回的是指针还是复制,关于c语言中返回值和返回指针的问题

93b728478fdab8b036eaf6733cd54d11.png

int testA (void)

{

int b = 1 ;

return b ;

}

char * testB (void)

{

char str[] = "abc" ;

return str ;

}

int main()

{

printf( " the value of testA is %d n", testA() ) ;

printf( " the value of testB is %c ", *( testB() ) ) ;

}

对于返回值的情况:

testA与main函数同在栈区,testA结束时C++创建临时变量,然后将返回值复制给该临时

变量。

printf( " the value of testA is %d n", testA() ) 时输出的是该临时变量的值,testA中的b已经不存在。

对于返回指针的情况:

这是最复杂的部分。首先,对于上面的情形:返回一个数组的首地址,由于是返回char *

类型,所以C++会首先创建一个char *类型的临时变量,再把该数组的首地址赋给临时变量;

函数结束后该数组也就被销毁,这就意味着临时变量指向了一个“未声明的地址”,幸运的情况下,这段内存暂时还没有被其他的数据所覆盖,因此还能输出正确的内容。

在testB里面,如果换成char* str="abc";return str; 由于这时str指向的是全局数据区的一段内存地址,所以函数结束后临时变量也指向该地址,所以编译器不会提出警告。但这样的方法是不推荐的。

返回引用:

这中情况的效率,它直接返回一个对象,不产生返回值的副本。但同时也要注意避免返回局部引用的情况。

2829f2ca24f0d0090cbba57f30759f23.png

关于c语言中返回值和返回指针的问题.doc

下载Word文档到电脑,方便收藏和打印[全文共611字]

编辑推荐:

8b95f2eb3d3f7ce4dc3bf1178c74941e.png

8b95f2eb3d3f7ce4dc3bf1178c74941e.png

8b95f2eb3d3f7ce4dc3bf1178c74941e.png

下载Word文档

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值