网站首页 > 文章中心 > 其它

c语言怎么调用函数返还值

作者:小编 更新时间:2023-09-13 19:20:25 浏览量:49人看过

C语言返回多个值的方法

导语:编写有多个返回值的函数是所有C语言教材里均没有提到的知识点,但在实际教学与应用的过程中我们都有可能会遇到这样的问题.以下是引导学生采用的三种不同方法编写多个返回值的C语言函数,一起来学习下吧:

方法1:利用全局变量

分析:全局变量作为C语言的一个知识点,虽然我们都了解它的特点,但在实际教学过程中应用得并不是很多.由于全局变量的作用域是从定义变量开始直到程序结束,而对于编写有多个返回值的C语言函数,我们可以考虑把要返回的多个值定义成全局变量.当函数被调用时,全局变量被更改,我们再把更改后的全局变量值应用于主调函数中.函数被调用后被更改后的全局变量值即为函数的数个返回值.下面以一个实例演示该方法的应用.

#include "stdio.h"

#include "conio.h"

int max,min;/*定义两个全局变量用于保存函数返回值*/

void max_min(int a,int b,int c) /*定义求最大最小值的函数*/

{max=min=a; /*初始化最大最小值*/

if(max if(max if(minb)min=b;

if(minc)min=c;

}

main()

{int x,y,z;

scanf("%d,%d,%d",x,y,z);

max_min(x,y,z) ;/*调用求最大值与最小值的函数*/

printf("三个数中的最大值为:%d;最小值为:%d",max,min);/*输出最大值与最小值*/

getch();

调试结果如下:

注意:该方法虽然可以实现有多个返回值的函数,但由于全局变量不能保证值的正确性(因为其作用域是全局,所以程序范围内都可以修改它的值,如果出现错误将非常难以发现),并且全局变量增加了程序间模块的耦合,所以该方法要慎用.

分析:在教学过程中,我们知道C语言函数参数的传递方式有值传递与地址传递.当进行值传递时,主调函数把实参的值复制给形参,形参获得从主调函数传递过来的值运行函数.在值传递过程中被调函数参数值的更改不能导致实参值的更改.而如果是地址传递,由于传递过程中从实参传递过来的是地址,所以被调函数中形参值的更改会直接导致实参值的更改.所以呢,我们可以考虑把多个返回值作为数组元素定义成一个数组的形式,并使该数组的地址作为函数的形式参数,以传址方式传递数组参数.函数被调用后,形参数组元素改变导致实参改变,我们再从改变后的实参数组元素中获得函数的多个返回值.以下实例演示该方法的应用.

方法:以指针方式传递该一维数组的地址,然后把数组的最大值与数组的'第一个元素交换,把数组的最小值与最后一个元素交换.函数被调用完毕后,实参数组中的第一元素为数组的最大值,实参数组中最后一个元素为数组的最小值,从而实现返回数组的最大值与最小值的功能.程序参考代码如下:

void max_min(int *ptr,int n) /*定义求数组最大值最小值的函数,传递数组指针*/

{int i,j,k;/*j保存最大值所在位置,k保存最小值所在位置*/

int *temp;/*用于交换位置*/

*temp=*ptr;

for(i=0;i{

if(*ptr*(ptr◆i))/*最大值与第一个元素进行交换*/

{

k=i;

*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 ;}

/*调用最大最小值函数*/

scanf("%d",A[i]);

注意:该方法适用于多个返回值的数据类型一致的情况.当返回值数据类型不一致时,不适用该方法.

方法:把学生基本信息定义成一个结构体,在用户自定义函数中传递该结构体的指针,则自定义函数中对结构体成员的录入操作即是对实参结构体成员的录入操作,从而实现多个返回值.参考代码如下:

struct inf{/*定义学生结构体,分别包含成员学号、姓名、班别、总评成绩*/

int chj;

};

main(void)

struct inf a1; /*定义学生结构体类型变量*/

void xxxx(struct inf *ptr);

printf("请输入学号,姓名,班别,总评成绩,以空格隔开: ") ;

xxxx(a1);/*调用函数,以学生结构体类型变量地址作为实参*/

printf("学号:%s,姓名: %s,班别:%s,总评成绩:%d",a1.xh, a1.name,a1.class,a1.chj);

void xxxx(struct inf *ptr)/*该函数实现对结构体成员数据的录入操作*/

int chj1;

scanf("%s%s%s%d",xh1,name1,class1,chj1);

strcpy(ptr-xh,xh1);

strcpy(ptr-name,name1);

strcpy(ptr-class,class1);

ptr-chj=chj1;

请输入学号,姓名,班别,总评成绩,以空格隔开:

注意:当函数要求返回的多个值是相互联系的或者返回的多个值数据类型不一致时可以采用该方法.

总结

C语言如何让一个函数返回多个值

在C语言中,一般情况下函数的返回值是通过函数中的return语句来实现的,每调用一次return语句只能从函数中返回一个值,下面我们就来看看C语言怎么让一个函数返回多个值!

工具/材料

全局变量传递

这种方式算是最不科学的规范,打破了软件开发需要的闭环策略,但在基本语法上是支持的,C语言里面最好少涉猎全局变量,使用出错的风险会提升很多,真要想使用建议还是用静态全局变量直接在变量的前面加上static修饰符.

使用数组名或指针作为函数的形参

被调函数的行参是一个指针,然后在被调函数中返回第一个值,被调函数改变指针参数指向的值,这样主调函数相应的值就改变了,也就相当于返回了第二个值了.这样就可以实现返回多个值!

结构体指针返回

结构体是C语言涉及数据结构的最直接的容器,通常在编程过程中实现一个功能模块在主函数里,我们可以定义一个结构体类型的变量,然后直接用函数返回值赋值就可以了.

c语言中,函数返回值怎么用?

return后接一个值.

在调用这个函数的函数里面,调用它的时候希望获得一个值,如果不希望获得这个值的时候,用void声明就好.如果需要,比如说需要得到一个整形值

就声明

int func()

在调用它的比如main里面

func()的作用就可以相当于一个int型常数

比如外面定义了

int max(int a,int b)

return ab?a:b;

主函数里面是

int A;

这个意思.

c语言中调用函数的返回值,如果是数组,主函数要输出这个数组怎么实现啊

用指针,另外保存数据的变量退出函数时不得消失.

例如:

#includestdio.h

int * fun(int n)

int i;

static int a[100]; // 这里用static

for (i=0;in;i◆◆) a[i]=i;

return a[0];

void main()

int *p; // 声明指针

p = fun(n); // 返回指针

for (i=0;in;i◆◆) printf("%d\n",p[i]); // 把 p 看成数组来输出

扩展资料:

注意事项

①.、数组的维度必须是一个常量表达式

int main(void)

int arr1[i];//正确

system("pause");

return 0;

而且需要注意的是,和内置类型的变量一样,如果在函数内部定义了某种内置类型的数组,那么默认初始化会令数组有未定义的值.

C语言-函数返回值return

①为什么需要return?

为了回答这个问题,

我打算用 模块思维 来解释.

②定义模块(形参模块)

定义函数:f(s)(a,b)

满足公式:s=a◆b

函数名:f(s)

形参: a,b(公式中的 变量 )

函数返回值:return s

③调用模块(实参模块)

主函数:main()表示用户自己编写的部分

函数名:f(s)和定义函数一致,产生调用

求值:printf("%d\n",x),求x的值?

④值的传递过程

定义模块 中的形参a和b

(实参到形参是单向传递,不可逆)

定义模块 中的return s

将s的值赋值给

~

return s的作用

就是将定义模块中的s

赋值 给调用模块中的调用函数

如果没有return s

调用模块中的调用函数将永远没有定值

即所求x 无定值

这一点和数学不一样,

数学中

同一函数名的值是 通用 的,

C语言中

定义函数和调用函数的值是 隔离 的,

尽管函数名一样

如果不赋值,调用函数永远无定值.

以上就是土嘎嘎小编为大家整理的c语言怎么调用函数返还值相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!

版权声明:倡导尊重与保护知识产权。未经许可,任何人不得复制、转载、或以其他方式使用本站《原创》内容,违者将追究其法律责任。本站文章内容,部分图片来源于网络,如有侵权,请联系我们修改或者删除处理。

编辑推荐

热门文章