黑马程序员技术交流社区

标题: 指针作为函数返回值注意(面试没答上来题目) [打印本页]

作者: 杨冬武    时间: 2016-4-3 09:48
标题: 指针作为函数返回值注意(面试没答上来题目)
  1. int * test (int x,int y)
  2. {
  3.     int a[2] = {y,x};
  4.     return a;
  5. }
复制代码

题目:
问可不可以这样写来交换两个数的值?

当时想交换两个数的值,就想到了三种方法,
1.临时变量。
2.数学相加相减。
3.按位亦或方法。

一下把考点弄错了,
这道题问的应该是指针作为函数的返回值问题,答案如下:
首先数组名是数组的地址,返回一个地址,
而这个地址是局部变量数组a的地址,
a存储在栈区,当函数结束后,
a就被回收了,这时再返回a的地址就有问题了。

怎么破:
解决这一问题的关键就是确保函数结束后,
数组a没有被回收。

我知道两种方法解决:
1.将a定义为全局变量。
2.将a声明在堆空间。

作者: 堕落天使    时间: 2016-4-4 07:59
学习了,多谢分享!
作者: 缘之有缘    时间: 2016-4-4 15:39
多谢分享,  
作者: muzipiao    时间: 2016-4-4 16:59
的确是个需要注意的点




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2