更新时间:2022-08-25 17:31
函数是C语言的基本构件,一个C程序可以由一个主函数和若干个子程序函数构成,由主函数调用其它子程序函数,其他子程序函数也可以互相调用。通常希望通过函数调用使主函数能得到一个确定的值,这就是函数的返回值。
在C语言中通过函数实现模块化程序设计思想,即用函数实现功能模块的定义,然后通过函数之间的调用来实现程序功能。因此函数有主调函数和被调函数。参数是主调函数和被调函数进行信息通信的接口,在函数的定义和说明语句中,我们将函数名后面括号中的参数称为形式参数,简称“形参”,在主调函数的调用语句中函数名后面括号中用的参数称为实际参数,简称“实参”。当函数被调用时实参要向形参传递数据,函数调用并完成一定的功能后也要向主调函数返回一些数据。
return 表示把程序流程从被调函数转向主调函数并把表达式的值带回主调函数,实现函数值的返回,返回时可附带一个返回值,由return后面的参数指定。 return通常是必要的,因为函数调用的时候计算结果通常是通过返回值带出的。 如果函数执行不需要返回计算结果,也经常需要返回一个状态码来表示函数执行的顺利与否(-1和0就是最常用的状态码),主调函数可以通过返回值判断被调函数的执行情况。
如果你定义一个函数有返回类型,可以像下面这样调用:
(1) 在返回类型是char的函数中,return后应该是char类型的值;
(2) 在返回类型是int的函数中,如果是要停止函数的调用,最好应该为0;
(3) 在返回类型是结构类型的函数中,return后应该是结构的一个实例对象。
总之,函数定义为什么样的返回类型,该函数中return后就应该是相应类型的值。
补充:如果你函数名前有返回类型定义,如int,double等就必须有返回值,而如果是void型,则可以不写return,但这时即使写了也无法返回数值。
例如:
1.非void型
2.void型
有时即使被调用函数是void类型 被调函数中的return也不是毫无意义的
举例:
运行结果为:屏幕上只输出一串数字1 而没有2。 但是如果去掉function函数中的return语句 就可以同时输出一串数字2。
这里的return其实还有个退出该程序的作用!也就是说在printf主函数中去了!
在C语言中,一般情况下函数的返回值是通过函数中的return语句来实现的,每调用一次return语句只能从函数中返回一个值。但在实际很多应用中,我们需要从函数中返回多个值,那我们可以用什么方法实现呢?此时我们可以用三种方法来实现。
方法一:设置全局变量
全局变量是在函数外部定义的全局变量,它不属于任何一个函数,其作用域是从变量的定义处开始,到本程序文件的结尾。在此作用域内,全局变量可为各个函数所引用。当我们需要函数返回多个值时,除了函数体中的return语句返回其中一个之外,其它的返回值我们可以通过定义全局变量来处理。因为根据全局变量的特点,在被调用函数中改变了多个全局变量和值,相当于其主调函数全局变量的值也发生了变化,也就相当于返回了多个值。
方法二:使用数组名或指针作为函数的形参
数组名或者指针实际为地址,而数组一般都包括多个元素,指针也可以指向一组数据的着地址,把数组名或者指针作为函数形参,实际上相当于主调函数的实参与形参共用地址,所以在函数中的数组元素发生改变即是实参也随之改变。也相当于在调用函数时多个值返回给主调函数。
方法三:用结构体作为函数的形参
在上述方法二中用数组返回函数多个值的情况,根据数组的特点要求返回的多个值必须是类型相同的数据,但是在实际应用过程中,有时返回值的类型不一定相同,那么我们有不有新的方法来处理这种情况?实际上在C语言中包含多个元素的构造类型除了数组之外,还有结构体和共用体。其中数组的元素类型必须相同,但是结构体和共用体的元素类型可以不相同。而结构体和共用体又有区别,在任何同一时刻,共用体只存放了一个被选中的成员,而结构体的所有成员都存在。因此,当函数需要返回多个不同类型的值时,用结构体来实现是比较函数的多值返回比较合理。
在函数中,如果碰到return 语句,那么程序就会返回调用该函数的下一条语句执行,也就是说跳出函数的执行,回到原来的地方继续执行下去。但是如果是在主函数中碰到return语句,那么整个程序就会停止,退出程序的执行。
函数的返回值是由返回语句return实现的,函数执行的最后一个操作就是返回,返回的意义是:
(1)子程序函数返回主调函数,宣告函数的一次执行结束,在调用期间所分配的变量单元被撤消;
(2)送函数值到调用表达式中,当然这一点并不是必需的,因为有些函数有返回值,有些函数没有返回值。