C语言中如何从一个函数获取两个及两个以上的返回值 |
您所在的位置:网站首页 › 一个渲染器函数一般包括哪两个参数 › C语言中如何从一个函数获取两个及两个以上的返回值 |
C语言中如何从一个函数获取两个及两个以上的返回值 方法一:设置全局变量,这样你在形参中改变全局变量,在实参中也会有效。所以你可以在形参中改变多个全局变量的值,那么在实参中就相当于返回多个值。 方法二:如果你用数组名作为形参,那么你改变数组内容,比如排序,或者进行加减运算,回到实参时依然是有效的。这样也会返回一组值。 方法三:可以利用指针变量,这个原理和方法二是一样的,因为数组名本身就是数组首元素的地址。就不多说了。 方法四:如果你学过C++,可以引用参数 如何编写有多个返回值的C语言函数 方法1:利用全局变量 分析:全局变量作为C语言的一个知识点,虽然我们都了解它的特点,但在实际教学过程中应用得并不是很多。由于全局变量的作用域是从定义变量开始直到程序结束,而对于编写有多个返回值的C语言函数,我们可以考虑把要返回的多个值定义成全局变量。当函数被调用时,全局变量被更改,我们再把更改后的全局变量值应用于主调函数中。函数被调用后被更改后的全局变量值即为函数的数个返回值。下面以一个实例演示该方法的应用。 实例1:编写函数求3个数中的最大值与最小值。 方法:把最大值、最小值分别定义成2个全局变量max、min,在用户自定义函数中把求出来的最大值与最小值分别赋给全局变量max、min。函数调用完毕后全局变量的max、min值即保存了函数要求返回的值。程序参考代码如下: 调试结果如下: 请输入3个整数: 5,-6,2 三个数中的最大值为:5;最小值为:-6 注意:该方法虽然可以实现有多个返回值的函数,但由于全局变量不能保证值的正确性(因为其作用域是全局,所以程序范围内都可以修改它的值,如果出现错误将非常难以发现),并且全局变量增加了程序间模块的耦合,所以该方法要慎用。 3方法2:传递数组指针 #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(min>b)min=b; if(min>c)min=c; } main() {int x,y,z; printf(" 请输入3个整数:\n"); scanf("%d,%d,%d",&x,&y,&z); max_min(x,y,z) ; printf("三个数中的最大值为:%d;最小值为:%d",max,min); getch(); }分析:在教学过程中,我们知道C语言函数参数的传递方式有值传递与地址传递。当进行值传递时,主调函数把实参的值复制给形参,形参获得从主调函数传递过来的值运行函数。在值传递过程中被调函数参数值的更改不能导致实参值的更改。而如果是地址传递,由于传递过程中从实参传递过来的是地址,所以被调函数中形参值的更改会直接导致实参值的更改。因此,我们可以考虑把多个返回值作为数组元素定义成一个数组的形式,并使该数组的地址作为函数的形式参数,以传址方式传递数组参数。函数被调用后,形参数组元素改变导致实参改变,我们再从改变后的实参数组元素中获得函数的多个返回值。以下实例演示该方法的应用。 实例2:编写函数求一维整形数组的最大值与最小值,并把最大值与最小值返回给主调函数。 方法:以指针方式传递该一维数组的地址,然后把数组的最大值与数组的第一个元素交换,把数组的最小值与最后一个元素交换。函数被调用完毕后,实参数组中的第一元素为数组的最大值,实参数组中最后一个元素为数组的最小值,从而实现返回数组的最大值与最小值的功能。程序参考代码如下: #include "stdio.h" #include "conio.h" void max_min(int *ptr,int n) {int i,j,k; int *temp; *temp=*ptr; for(i=0;i { if(*ptr*(ptr+i)) { j=i; *temp =*(ptr+n-1); *(ptr+n-1)=*(ptr+j); *(ptr+j)= *temp ;} } } main() { int A[6],i; for(i=0;ixh,xh1); strcpy(ptr->name,name1); strcpy(ptr->class,class1); ptr->chj=chj1; }调试结果如下: 请输入学号,姓名,班别,总评成绩,以空格隔开: 200102LiLi200185 学号:200102,姓名: LiLi,班别:2001,总评成绩:85 注意:当函数要求返回的多个值是相互联系的或者返回的多个值数据类型不一致时可以采用该方法。 5结束语 对于以上这三种方法,如果想要返回的数个值数据类型一致,可以考虑采用方法2;而对于不同数据类型的返回值,如果各个数值之间是相互联系的,则方法3较为合适;方法1虽然在很多情况下都可以实现多个返回值的C语言函数,但毕竟全局变量应用过程中有很多危险,要慎重使用。 通过对以上几种方法的分析讲解,在教学过程中,学生再遇到这样的问题时,就能根据返回值的情况选择合适的途径去实现多个返回值的C语言函数。另外,如果再遇到类似的无法用教材知识点去直接解决的问题时,他们基本都能举一反三地尝试采用间接方式去解决。 参考文献 [1] 谭浩强. C程序设计(第五版)[M]. 北京:清华大学出版社 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |