不是说函数不要返回内部变量吗?

jiahao__liu 2017-11-22 04:00:58
我在看的这本书上我发现很多都是返回内部变量呀?
...全文
141 10 点赞 打赏 收藏 举报
写回复
10 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
paschen 2017-11-22
不要返回局部变量说的是返回局部变量的地址,你这里返回是按值返回,返回后是复制了局部变量的值,之后使用的并不是你函数中的局部变量,所以没有问题
  • 打赏
  • 举报
回复
其实不明白这些,因为只知其然,不知其所以然
  • 打赏
  • 举报
回复
自信男孩 2017-11-22
引用 7 楼 xsklld 的回复:
[quote=引用 5 楼 cfjtaishan 的回复:] [quote=引用 4 楼 xsklld 的回复:] [quote=引用 3 楼 cfjtaishan 的回复:] 这个局部变量是一个指针,这个指针指向的是堆上的空间;堆上的空间生命周期是从malloc开始知道free才会结束; 若返回的是局部的数组,那么就会有问题,因为局部数组是在栈上申请的,它的生命周期是从定义开始,到函数结束;函数结束后就会将其释放;
那也是复制构造函数没有写好的锅,跟返回局部变量没有关系。[/quote] 怎么跟局部变量没关系呢?局部变量可能是一个指针变量,也可能是数组等等;[/quote] 我看错了,我以为他的PriorityQueue是个类。[/quote] 哦,楼主的是C语言,不会涉及到类。
  • 打赏
  • 举报
回复
xskxzr 2017-11-22
引用 5 楼 cfjtaishan 的回复:
[quote=引用 4 楼 xsklld 的回复:] [quote=引用 3 楼 cfjtaishan 的回复:] 这个局部变量是一个指针,这个指针指向的是堆上的空间;堆上的空间生命周期是从malloc开始知道free才会结束; 若返回的是局部的数组,那么就会有问题,因为局部数组是在栈上申请的,它的生命周期是从定义开始,到函数结束;函数结束后就会将其释放;
那也是复制构造函数没有写好的锅,跟返回局部变量没有关系。[/quote] 怎么跟局部变量没关系呢?局部变量可能是一个指针变量,也可能是数组等等;[/quote] 我看错了,我以为他的PriorityQueue是个类。
  • 打赏
  • 举报
回复
大尾巴猫 2017-11-22
返回变量的值没什么问题,本来就是复制的。比如函数内部的x=3,返回这个x没问题 不要返回内部变量指的是不能返回内部变量的地址(即指针)。
  • 打赏
  • 举报
回复
自信男孩 2017-11-22
引用 4 楼 xsklld 的回复:
[quote=引用 3 楼 cfjtaishan 的回复:] 这个局部变量是一个指针,这个指针指向的是堆上的空间;堆上的空间生命周期是从malloc开始知道free才会结束; 若返回的是局部的数组,那么就会有问题,因为局部数组是在栈上申请的,它的生命周期是从定义开始,到函数结束;函数结束后就会将其释放;
那也是复制构造函数没有写好的锅,跟返回局部变量没有关系。[/quote] 怎么跟局部变量没关系呢?局部变量可能是一个指针变量,也可能是数组等等;
  • 打赏
  • 举报
回复
xskxzr 2017-11-22
引用 3 楼 cfjtaishan 的回复:
这个局部变量是一个指针,这个指针指向的是堆上的空间;堆上的空间生命周期是从malloc开始知道free才会结束; 若返回的是局部的数组,那么就会有问题,因为局部数组是在栈上申请的,它的生命周期是从定义开始,到函数结束;函数结束后就会将其释放;
那也是复制构造函数没有写好的锅,跟返回局部变量没有关系。
  • 打赏
  • 举报
回复
自信男孩 2017-11-22
这个局部变量是一个指针,这个指针指向的是堆上的空间;堆上的空间生命周期是从malloc开始知道free才会结束; 若返回的是局部的数组,那么就会有问题,因为局部数组是在栈上申请的,它的生命周期是从定义开始,到函数结束;函数结束后就会将其释放;
  • 打赏
  • 举报
回复
而且,不是不能够返回函数内部的变量,而是不能返回内部变量的引用
  • 打赏
  • 举报
回复
它返回的是指针
  • 打赏
  • 举报
回复
相关推荐
发帖
C语言
加入

6.5w+

社区成员

C语言相关问题讨论
申请成为版主
帖子事件
创建了帖子
2017-11-22 04:00
社区公告
暂无公告