| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1849 人关注过本帖
标题:要想得到多个返回值,应该怎么弄
只看楼主 加入收藏
艺术的生活
Rank: 2
等 级:论坛游民
帖 子:51
专家分:77
注 册:2013-7-28
结帖率:85.71%
收藏
已结贴  问题点数:10 回复次数:28 
要想得到多个返回值,应该怎么弄
只有用全局变量吗?
最好举个例子。
搜索更多相关主题的帖子: 最好 
2013-08-19 21:40
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:2 
要么用指针或引用通过参数返回,要么返回一个结构体数据。其实,一般的做法是用结构体指针或引用作参数。

授人以渔,不授人以鱼。
2013-08-19 21:44
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
原则上是尽量不用全局变量,但局部是相对的,有小局部,也有大局部,小至花括号代码块,大至模块级静态变量,要视具体情况来划定局部变量的范围。当传参太多的时候,正是C++封装类的意图,把数据置入一个类区域中,作为类范围内的全局变量使用,C没有类的概念,但可以做模块级变量,把作用于局限在模块范围内,不至于成为程序级的全局变量(其实还有更大范围的全局变量,即外部储存的数据,典型如数据库中的数据)。总之,如何衡量,是看你自己的取舍,所以人家说编程是艺术,讲究平衡的。

授人以渔,不授人以鱼。
2013-08-19 22:04
艺术的生活
Rank: 2
等 级:论坛游民
帖 子:51
专家分:77
注 册:2013-7-28
收藏
得分:0 
回复 3楼 TonyDeng
还想问你一个问题:我总是理解不好栈这个概念。我知道栈是先进后出的。
什么样的东西是放在栈里面的?
栈是栈桢的集合吗?
2013-08-19 22:31
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
有多个“栈”的概念。程序运行中的内存栈,与数据结构的栈,是两个不同的东西,字相同,意义不同。程序的内存栈,只是快速存取数据的一块空间,程序对这块内存的数据,写上去是不看原先内容的,闭上眼就覆盖,而且空间会反复利用,这种数据未必总是后进先出(不是参数压栈那种数据结构栈模式),总之,你把这种空间看作是数据容易被擦写的就行了。当一段函数被执行,或为某段代码块运行,而开辟了栈空间,局部变量就占用这块内存,当代码块或函数结束,程序就宣布这块中的数据被废弃,可以回收利用,此时不需清零和释放内存,后面的函数和代码块数据分配见有空闲而足够的内存就会来占据,把原先的数据擦掉就行了(想象一下新数据擦不满旧数据会留下旧数据的情形就知道会出现什么情况,很多现象都是这个原因解释的)。相反,对堆数据来说,那些数据不明令释放和废弃,程序是不会擦写它们的。这样两种不同的处理手法,就是栈内存和堆内存的区别,其实是从一条内存线上的两端相向增长使用内存罢了。

C/C++本机程序,划分栈内存和堆内存,但托管的C++/CLI程序,是只有栈内存的,程序不负责回收内存,也不需释放,只要往整个程序空间(32位机上是4G内存)不断向前取空间就是了,不需回收,不需管理,所以效率比传统的做法高得多,因为全部是栈内存模式,是最高效的用法,一般来说,中小型程序,几乎都不用垃圾回收机制回收内存(托管程序是没有释放动态申请内存的指令的,亦即不需free()或delete内存,省事许多),程序结束后由操作系统把整个空间回收,干干净净。

程序中,把那么一块内存叫做“栈空间”,数据结构把某种数据的处理手法叫“栈存取模式”。

授人以渔,不授人以鱼。
2013-08-19 22:50
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
无论是栈内存,还是堆内存,都无法避免空洞的出现,函数调用关系错综复杂时,就会出现空洞,总体数字看起来有足够的内存,但实际上没有一块连续的空间能夠满足分配需要,这个时候就出现内存耗尽的错误,往往是这种情形居多,不是真的不够内存,而且这是程序员写代码管理不善引起的,这种问题长年累月困扰着无数的程序员,CLI托管模式,就是专门解决这种问题而推出的。

空洞的形象,看看磁盘文件碎片图就明白了。比如100M的空间,在前面分配了20M,跳过20M之后又分配了20M,那么总共有60M空闲,但最大的连续内存却只有40M,所以这60M空闲不够分配给50M的需求。碎片化越厉害,越容易完蛋,数据的搜寻速度也越慢。以前的大型程序,要程序员自己写一个管理内存的模块,负责整理内存碎片,数据一旦移动,指针的就很悬了,若不跟着把相关的指针指向也整理妥当,嘿嘿~指针其实不是那么好用的,人家说把指针掌握好,就是指你有没有意识这类问题,在写程序时是否知道应该如何运用,不是懂个二级三级指针搞点链表、二叉树就精通指针了。

授人以渔,不授人以鱼。
2013-08-19 23:16
赵疯子
Rank: 8Rank: 8
来 自:dream
等 级:蝙蝠侠
威 望:2
帖 子:365
专家分:737
注 册:2013-5-5
收藏
得分:2 
栈顶越界很危险的。。。不过黑客利用栈能做很多事
2013-08-20 00:13
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:2 
TonyDeng你这么说瞎话不觉得亏心么?在我看来那些话只是个笑话,但啥都不懂的新手们要是信了你的话会让他们日后的学习中走多少弯路你想过吗?

郑重声明,5楼6楼的言论纯属意淫扯淡,新手勿信。就没一句说对的,我都懒得解释哪错了。当然如果作者不服我可以解释。
收到的鲜花

重剑无锋,大巧不工
2013-08-20 10:13
赵疯子
Rank: 8Rank: 8
来 自:dream
等 级:蝙蝠侠
威 望:2
帖 子:365
专家分:737
注 册:2013-5-5
收藏
得分:0 
回复 8楼 beyondyf
其实这个帖子的问题很好解决,大家不要伤了和气,我虽然知道的不多,但可以给你支几招,进入函数时可以定义你需要多少返回值的指针数组,返回时可以返回该数组,这样可以实现你的多个返回值
2013-08-20 10:39
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
这就不是和气的事,这是个原则问题,为了和气就放任他在那胡说八道给别人灌输错误的概念?

换作别的论坛,他这话我也就一笑了之。但这个论坛里多是些连基本语法还搞不明白的小朋友,很容易对他的话信以为真。

话说有多少人能说出他那些话中的谬误之处?

对这样的论坛情势,我表示非常遗憾。

重剑无锋,大巧不工
2013-08-20 11:02
快速回复:要想得到多个返回值,应该怎么弄
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.039753 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved