大家好,今天小编关注到一个比较有意思的话题,就是关于c语言行语句的问题,于是小编就整理了1个相关介绍c语言行语句的解答,让我们一起看看吧。
C语言中的函数为什么只能有一个返回值输出?怎么实现多个值输出?
通常返回值设置在寄存器eax,这个设计非常好!是大家多年总结出来的。当然也可以放到别的寄存器里,但是为了函数的兼容性总要有个规矩你也可放到ecx里面。以上表述都是*86体系的
C语言函数只能有一个输出,这是受当时编程方法的影响。是一个历史问题。在C语言发明前,大多数人还在用汇编语言的时候,那真的是百花齐放,啥样都有。导致编程效率底下,bug层出,维护困难。所以有个大牛E.W.Dijikstra提出了一个革命性的思想,结构化程序设计。在这个思想下提出了编程函数化的理念。基于此出现了一系列的语言。C语言是其中一个发展最好的。就好像一个人生了一堆娃,其中一个当了总统。但总统也来自同一个基因。关于C语言为何脱颖而出发展壮大不是我们这里讨论的问题,就不深入讲了(讲下去可以写本书)。
我们就讲下为何函数为何只有一个输出。其实都源于数学。数学的函数可以有多个变量,但只有一个结果。这其实是为了数学简单化。编程也是一样。这样的编程结果明确,没有乱七八糟的网状关系。所以现在函数式编程还是一个很火的理念。
但是,你不得不承认,现实问题还是有很多不止一个输出结果的情况。好在c语言还留了一个后门。叫指针操作。通过指针操作你可以输出多个结果。这是C语言发展壮大的一个原因。也是现在C语言为人诟病的关键点。
现代编程语言大多抛弃了指针操作,但保留了多结果输出。不过函数式编程的理念也没有丢。也就是函数只有一个返回值,但这个返回值可以包含多个结果。
C语言的return语句只能返回一个返回值,要返回多个值,有以下办法:
1.返回数组(用指针)。前提条件是返回的多个数值具有相同的数据类型,不然也没法放到一个数组里面。
2.返回结构体。前提条件是这多个数据有一定的内在逻辑关系,不然强行定义一个结构体,把一堆不相干的数据放一起,即便语法上没问题,总觉得很别扭。
2也可以用指针。
3.通过函数参数来返回多个返回值。需要把函数参数定义为指针形式。
int Funtion(int param1,int param 2,int* p1,double* p2,.....)
上面这个函数,除了返回一个int,还能通过函数参数里面的两个指针p1,p2分别返回一个int和一个double。
C语言的函数还真的只能有一个值返回,因为大部分情况下,我们不需要返回多个值,C语言规范中为了尽量避免程序设计的难度,就没有考虑函数的多个值的返回情况。即使有返回多个值的需求,也可以通过其它方式实现。我总结一下,大概有四种方式
一. 传参数
通过指针或引用的方式可以在函数中改变传入参数的值,例如在做两个数的交换时,如果用指针方式,可以像下面这样写
如果***用引用的方式,稍微改一下就好了,如下
这样a和b其实可以看成是要返回的两个值,这种通过指针和引用的方式一般是用得最多的多值返回方式。
二. 返回元组
当然我们可以以数组的形式值返回,即使类型不一样也没有关系,比如要返回三种类型的值,都将它们存入到一个string类型的数组里面,将每一个类型的值当成字符串存入,在使用时解析并转化一下类型就好了。
其实在C++11中就有tuple可以满足这个需求了,tuple中可以放不同类型的元素,并且在使用时也有对应方法获取变量值。例如
到此,以上就是小编对于c语言行语句的问题就介绍到这了,希望介绍关于c语言行语句的1点解答对大家有用。