如何理解return?
一个函数中可能存在多个return的情况,不管程序执行流程出发了哪个return,都会造成当前函数的立即终止,所以不存在执行两个以及以上return的可能。
return就是表示退出当前函数,入口只有一个,但是出口可以有很多个,退出函数后,函数内的全部局部变量不能使用。
多种情况的说明:
- 返回值类型与函数类型一致,不一致则自动将返回值类型转换成函数类型
- 函数中存在多条return语句,一般与if连用,执行到哪个return返回值语句,哪个语句就终止函数,后面的不再继续执行。
- 无return的函数,执行到函数结尾时候返回,返回一个不确定的数值给函数
- 如果只需要从函数中返回但是不需要任何返回值,可以使用不带表达式的return语句。博客小精华🤭
函数返回多个值如何实现?
大致遵从大神的道路整理了三种返回多个返回值的函数创建方法!一起来学习吧:
- L申请全局变量(慎用)
2.数组指针法 结构体指针法
全局变量法
- 由于全局变量的作用域是从定义变量开始直到程序结束。
- 而对于编写有多个返回值的C语言函数,我们可以考虑把要返回的多个值定义成全局变量。
- 当函数被调用时,全局变量被更改,我们再把更改后的全局变量值应用于主调函数中。函数被调用后被更改后的全局变量值即为函数的数个返回值。
- 😵文字啰嗦(小小一声sorry
求最大最小数值:运用到了全局变量的观念(很好理解
#include <stdio.h>
#include <conio.h>
int max,min;
void max_min(int a,int b)
{
max=min=a;
max=(a>b)?a:b;
min=(a<b)?a:b;
}
main()
{
int x,y;
printf("请输入2个整数:\n");
scanf("%d,%d",&x,&y);
max_min(x,y) ;
printf("l两个数中的最大值为:%d;最小值为:%d",max,min);
}
数组指针法
👩?🏫👩?🏫👩?🏫值传递VS地址传递
值传递: 是(main)主调函数(提供实际参数的函数)把实参的值复制给形式参数(被调函数(形式参数接收实际参数数值的函数)(自己的设置函数)参数值的变化并不能改变实参数值)。) 通俗理解别人的东西我可以买到,但是不能占有,我可以随心所欲把我买到的相同物品改成我想改成的样子 ===================================== 地址传递: 从实参中传递过来的是实参变量的地址,所以被调函数中形参的改变使得实参也发生变化。 但是鸠占鹊巢的实际故事也不少标😓😓😓
因此,我们可以考虑把多个返回值作为数组元素定义一个数组的形式,并使得该数组的地址,作为函数的形式参数,以传地址的方式传递数组参数,被调函数调用后,形式参数的改变使得实际参数的改变,这样我们再从改变后的数组元素中获得函数的多个数值。 🤫(**偷摸学**到了,**内卷**成功😏😏😏😏) 需要注意的是,如果是数组指针形式,必须要求多个函数的参数必须类型相同
#include <stdio.h>
void max_min(int *ptr,int n)
{
int i,j,k;
int *temp;
*temp=*ptr;
for(i=0;i<n;i++) {
if(*ptr<*(ptr+i)) {
k=i;
*temp=*ptr;
*ptr=*(ptr+k);
*(ptr+k)=*temp; }
if(*(ptr+n-1)>*(ptr+i)) {
j=i;
*temp =*(ptr+n-1);
*(ptr+n-1)=*(ptr+j);
*(ptr+j)= *temp;}
}
}
main()
{
int A[6],i;
for(i=0;i<6;i++)
scanf("%d",&A[i]);
max_min(A,6);
printf("max=%d, min=%d\n \n",A[0],A[5]);
}
运用场景就是,适用于多个返回值的数据类型一致的情况。
传递结构体指针
如果我们编写的多个返回值的C函数返回的数据类型不一样,我们可以通过定义全局变量,也可以通过考虑把要求返回的数值定义为一个结构体,然后同样以传递结构体指针的方式把结构体的指针传递给形参结构体指针,那么函数中对结构体修改就是对实参结构体的修改,函数被调用后获取的实参的结构体成员就是函数的多个返回值 当函数要求返回的多个值是相互联系的或者返回的多个值数据类型不一致时可以采用该方法。 感恩友友,一键三联支持下吧😍
|