A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  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声明在堆空间。

3 个回复

倒序浏览
学习了,多谢分享!
回复 使用道具 举报
多谢分享,  
回复 使用道具 举报
的确是个需要注意的点
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马