精华内容
下载资源
问答
  • 函数有个返回值

    千次阅读 2019-11-23 19:08:47
    //无参多个返回值函数 func myfunc01( ) (int,int,int) { return 1,2,3 } //go官方推荐方法 func myfunc02( ) (a int,b int,c int) { a,b,c = 111,222,333 return } func myfunc03( ) (a,b,c int) { a,...

    package main
    import “fmt”
    //无参多个返回值的函数
    func myfunc01( ) (int,int,int) {
    return 1,2,3
    }
    //go官方推荐方法
    func myfunc02( ) (a int,b int,c int) {
    a,b,c = 111,222,333
    return
    }
    func myfunc03( ) (a,b,c int) {
    a,b,c = 444,555,666
    return
    }
    func main ( ) {
    //函数调用
    a,b,c := myfunc01( )
    fmt.Printf(“a = %d,b = %d,c = %d\n”,a,b,c)
    a,b,c := myfunc02( )
    fmt.Printf(“a = %d,b = %d,c = %d\n”,a,b,c)
    a,b,c := myfunc03( )
    fmt.Printf(“a = %d,b = %d,c = %d\n”,a,b,c)
    }

    展开全文
  • 在移植wifi的代码时,遇到了一些与下面类似的函数,这些函数不只一个return,这可是个新鲜的玩意儿: int func (int b) { int a=5; if (a>b) return a; else return b; return 0; }  原来C/C++ 中,...

          在移植wifi的代码时,遇到了一些与下面类似的函数,这些函数中有不只一个return,这可是个新鲜的玩意儿:

    int func (int b)
    {
       int a=5;
       if (a>b)
          return a;
       else
          return b;
    
       return  0;
    }

         原来C/C++ 中,reutrn语句是这样定义的:

         通过在函数中使用返回语句,返回一个值给函数,同时终止函数的调用,返回主函数。(注意:同时终止函数的调用,也就是说函数在运行到return时就会终止了。)

         格式:    return (表达式); 或return 表达式;

          功能:    

           (1)计算表达式的值,将表达式的值返回给函数。 

           (2)从被调用的函数返回主调函数。 
           说明: 
           (1)返回值类型应和函数类型一致,不一致将返回值自动转换成函数类型。 
           (2)函数中可以有多条返回语句,这时一般与if语句联用,执行到哪一条返回语句,哪条返回语句起作用。 
           (3)函数中无return语句,执行至函数体结尾时返回,此时将返回一个不确定的值给函数。
           (4)如果只需要从函数中返回,而不需带回值,使用不带表达式的return语句。

           此外,有时调用一个函数,需要返回多个参数,这种情况应当如何处理呢?

           可以有两种办法:一是申请一个全局变量,在函数调用时对其进行处理,返回主程序时仍然可用;另一种办法是,返回一个指针,指针指向一个结构体,或者一个数组,这样就能返回多个参数了。而指向结构体的指针,在很多情况下是很常见的。

    展开全文
  • c语言||函数产生多个返回值???? 有一天,我正愉悦地写着函数,突然,我想让这个函数返回多个值, 下子懵逼了呀 无奈之下,只好翻阅资料,整理了这篇文章 本文的结构如下: 1.三种函数返回多个返回值的方法: ​ ...

    c语言||函数产生多个返回值🤭

    有一天,我正愉悦地写着函数,突然,我想让这个函数返回多个值,
    一下子懵逼了呀

    无奈之下,只好翻阅资料,整理了这篇文章

    本文的结构如下:

    1.三种函数返回多个返回值的方法:

    ​     1.全局变量法(慎用)

    ​     2.数组指针法

    ​     3.结构体指针

    2.三种方法的注意点及建议使用场景




    1.三种函数返回多个返回值的方法:

    1.全局变量法💪:

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

         实例1:编写函数求2个数中的最大值与最小值

    方法:把最大值、最小值分别定义成2个全局变量max、min,在用户自定义函数中把求出来的最大值与最小值分别赋给全局变量max、min。函数调用完毕后全局变量的max、min值即保存了函数要求返回的值。程序参考代码如下:

    #include <stdio.h>
    #include <conio.h>
    //make by 以太
    int max,min;//定义两个全局变量用于保存函数的返回值
    void max_min(int a,int b) /*定义求最大最小值的函数*/ 
    {
        max=min=a; /*初始化最大最小值*/
       	 max=(a>b)?a:b;
        min=(a<b)?a:b;//make by 以太
    }
    main()  
    {
      int x,y;
      printf("请输入2个整数:\n");  
      scanf("%d,%d",&x,&y);
      max_min(x,y) ;/*调用求最大值与最小值的函数*/
      printf("l两个数中的最大值为:%d;最小值为:%d",max,min);/*输出最大值与最小值*/  
    }
    

    运行结果:

    在这里插入图片描述




    2.数组指针法:(考考自己,数组指针和指针数组能分清吗?😮)

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

        实例2:编写函数求一维整形数组的最大值与最小值,并把最大值与最小值返回给主调函数。

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

    #include <stdio.h>  
    //make by 以太
      void max_min(int *ptr,int n) /*定义求数组最大值最小值的函数,传递数组指针*/
      {
      int i,j,k;/*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;}  //make by 以太
       }  
      }
      /*调用最大最小值函数*/  
       
      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]);   
     }
    

    运行结果: image-20200331124355437




    3.传递结构体指针法😅:

        分析:结构体作为教学中的一个难点,教材对它介绍的内容并不多,应用的实例更是少之又少,所以学生对于结构体普遍掌握情况不理想。其实,编写返回多个值的C语言函数,也可以考虑采用结构体的方式去实现。通过方法2,我们知道如果返回的数个数值的数据类型不一致,可以通过定义全局变量实现有多个返回值的C语言函数,也可以考虑把要求返回的数个值定义成一个结构体,然后同样以传递结构体指针方式把结构体的指针传递给形参结构体指针,那么函数中对形参结构体的修改即是对实参结构体的修改,函数被调用后获取的实参结构体成员即为函数的多个返回值,下面以实例演示该方法的应用。

        实例3:编写一个用户自定义函数,允许用户录入学生的基本信息(包括学号、姓名、所属班级、总评成绩),并返回这些基本信息给主调函数。

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

    #include <stdio.h>
    //make by 以太
      struct inf{/*定义学生结构体,分别包含成员学号、姓名、班别、总评成绩*/   
         char xh[12];   char name[20];   char class[15];
         int chj;  
    };
      main(void)  
    {
      struct inf a1; /*定义学生结构体类型变量*/  
      void xxxx(struct inf *ptr);
      printf("请输入学号,姓名,班别,总评成绩,以空格隔开:\n") ;
      xxxx(&a1);/*调用函数,以学生结构体类型变量地址作为实参*/
      printf("学号:%s,姓名: %s,班别:%s,总评成绩:%d",a1.xh,a1.name,a1.class,a1.chj);  
    
    }
      void xxxx(struct inf *ptr)/*该函数实现对结构体成员数据的录入操作*/  {
      char xh1[12],name1[20],class1[15];   
      int chj1;
      scanf("%s%s%s%d",xh1,name1,class1,&chj1);   
      	  strcpy(ptr->xh,xh1);  //make by 以太
         strcpy(ptr->name,name1);  
         strcpy(ptr->class,class1);  
         ptr->chj=chj1;   
    }
    

    运行结果:image-20200331130327965






    第一次尝试写这么多的博客,有点紧张。写的也不大好,希望能帮助到有问题的小伙伴们🤭






    2.三种方法的注意点及建议使用场景

        第一种方法谨慎使用,学过c的小伙伴应该都知道”模块化“,不知道的话,得去百度百度,顺便补补基础知识了。如果用全局变量的话就仿佛意味着一个函数不是一个函数,与其他函数有了关系,不利于模块化,有可能会导致大漏洞的,造成各种出错,可以想象一下,如果是多人合作编写的话,你这么写的话,会不会也会给别人造成麻烦呢?

    举一个出错的实例康康吧:我在这边定义了一个全局变量,然后不小心在程序范围里修改了它的值,那么最后输出的是什么?


        第二种方法的运用场景就是,适用于多个返回值的数据类型一致的情况。


        第三种方法的运用场景是:当函数要求返回的多个值是相互联系的或者返回的多个值数据类型不一致时可以采用该方法。


                            see you again

    展开全文
  • 学生也尝试了不少方法:如把多个需要返回的值作相应的处理后变成一个可以用return语句返回的数据,再在主调函数中拆开返回的数据使之变成几个值;或者把需要返回多个值的一个函数分开几个函数去实现多个值的返回。...

    编写有多个返回值的函数是所有C语言教材里均没有提到的知识点,但在实际教学与应用的过程中我们都有可能会遇到这样的问题。有学生也尝试了不少方法:如把多个需要返回的值作相应的处理后变成一个可以用return语句返回的数据,再在主调函数中拆开返回的数据使之变成几个值;或者把需要返回多个值的一个函数分开几个函数去实现多个值的返回。这些方法虽然最终都能实现返回要求的多个值,但从程序算法的合理性与最优化方面去考虑,显然不理想。我们知道C语言函数的返回值是通过函数中的return语句来实现的,可是每调用一次函数,return语句只能返回一个值。那么当我们希望从一个函数中返回多个值时,用什么方法去实现比较合理呢?在教学过程中,我建议学生跳出对return语句的定势思维,一步步引导学生通过几种间接方式实现多个返回值的C语言函数。以下是笔者在教学过程中引导学生采用的三种不同方法编写多个返回值的C语言函数。

    目录

     

    方法1:利用全局变量

    方法2:传递数组指针  

    方法3:传递结构体指针 


     

    方法1:利用全局变量  

      分析:全局变量作为C语言的一个知识点,虽然我们都了解它的特点,但在实际教学过程中应用得并不是很多。由于全局变量的作用域是从定义变量开始直到程序结束,而对于编写有多个返回值的C语言函数,我们可以考虑把要返回的多个值定义成全局变量。当函数被调用时,全局变量被更改,我们再把更改后的全局变量值应用于主调函数中。函数被调用后被更改后的全局变量值即为函数的数个返回值。下面以一个实例演示该方法的应用。
      实例1:编写函数求3个数中的最大值与最小值。
      方法:把最大值、最小值分别定义成2个全局变量max、min,在用户自定义函数中把求出来的最大值与最小值分别赋给全局变量max、min。函数调用完毕后全局变量的max、min值即保存了函数要求返回的值。程序参考代码如下:

    #include <stdio.h>
    int min, max;
    int min_max(int a, int b, int c)
    {
    	int t;
    	if(a > b)
    	{
    		t = a;
    		a = b;
    		b = t;
    	}
    	if(a > c)
    	{
    		t = a;
    		a = c;
    		c = t;
    	}
    	if(b > c)
    	{
    		t = b;
    		b = c;
    		c = t;
    	}
    	min = a;
    	max = c;
    }
    int main()
    {
    	int a, b, c, d, e;
    	scanf("%d%d%d%d%d",&a, &b, &c, &d, &e);
    	min_max(a,b,c);
    	min_max(min,max,d);
    	min_max(min,max,e);
    	printf("%d %d",min, max);
    	return 0;
    }

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

    方法2:传递数组指针
      

      分析:在教学过程中,我们知道C语言函数参数的传递方式有值传递与地址传递。当进行值传递时,主调函数把实参的值复制给形参,形参获得从主调函数传递过来的值运行函数。在值传递过程中被调函数参数值的更改不能导致实参值的更改。而如果是地址传递,由于传递过程中从实参传递过来的是地址,所以被调函数中形参值的更改会直接导致实参值的更改。因此,我们可以考虑把多个返回值作为数组元素定义成一个数组的形式,并使该数组的地址作为函数的形式参数,以传址方式传递数组参数。函数被调用后,形参数组元素改变导致实参改变,我们再从改变后的实参数组元素中获得函数的多个返回值。以下实例演示该方法的应用。
      实例2:编写函数求一维整形数组的最大值与最小值,并把最大值与最小值返回给主调函数。
      方法:以指针方式传递该一维数组的地址,然后把数组的最大值与数组的第一个元素交换,把数组的最小值与最后一个元素交换。函数被调用完毕后,实参数组中的第一元素为数组的最大值,实参数组中最后一个元素为数组的最小值,从而实现返回数组的最大值与最小值的功能。程序参考代码如下:

    #include <stdio.h>
     
    void min_max(int *ptr,int n)
    {
    	int *temp;
    	for(int i = 0; i < n; i++)
    	{
    		if(*(ptr) > *(ptr+i))
    		{
    			*temp = *(ptr);
    			*(ptr) = *(ptr+i);
    			*(ptr+i) = *temp;
    		}
    		if(*(ptr + n-1) < *(ptr + i) )
    		{
    			*temp = *(ptr+n-1);
    			*(ptr+n-1) = *(ptr+i);
    			*(ptr+i) = *temp;
    		}
    	}
     } 
    int main()
    {
    	int a[5];
    	for(int i = 0; i < 5 ; i++)
    		scanf("%d",&a[i]);
    	min_max(a,5);
    	printf("%d %d",a[0], a[4]);
    	return 0;
     } 

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

    方法3:传递结构体指针
     

      分析:结构体作为教学中的一个难点,教材对它介绍的内容并不多,应用的实例更是少之又少,所以学生对于结构体普遍掌握情况不理想。其实,编写返回多个值的C语言函数,也可以考虑采用结构体的方式去实现。通过方法2,我们知道如果返回的数个数值的数据类型不一致,可以通过定义全局变量实现有多个返回值的C语言函数,也可以考虑把要求返回的数个值定义成一个结构体,然后同样以传递结构体指针方式把结构体的指针传递给形参结构体指针,那么函数中对形参结构体的修改即是对实参结构体的修改,函数被调用后获取的实参结构体成员即为函数的多个返回值。
     
      对于以上这三种方法,如果想要返回的数个值数据类型一致,可以考虑采用方法2;而对于不同数据类型的返回值,如果各个数值之间是相互联系的,则方法3较为合适;方法1虽然在很多情况下都可以实现多个返回值的C语言函数,但毕竟全局变量应用过程中有很多危险,要慎重使用。

      通过对以上几种方法的分析讲解,在教学过程中,学生再遇到这样的问题时,就能根据返回值的情况选择合适的途径去实现多个返回值的C语言函数。另外,如果再遇到类似的无法用教材知识点去直接解决的问题时,他们基本都能举一反三地尝试采用间接方式去解决。

    展开全文
  • 1、函数定义 linux shell 可以用户定义函数,然后在shell脚本中可以随便调用。Shell 函数定义的语法格式如下: [function] funname [()]{ 函数体 [return int;] } 格式1: 简化写法,不写 function 关键字: ...
  • VB编程怎么在返回值的类型中再嵌套一个函数返回值类型?我想返回给几个控件应该怎么做?
  • 1. 函数: public (string, string, int, double) FunctionName(string ID) { ... //第1个返回值 string a2 = ""; //第2个返回值 int a3 = 1; //第3个返回值 double a4 = 1.20; //第4个返回值 ...
  • python 定义函数 返回值只取其中一个

    万次阅读 2019-01-12 15:09:00
    def test(): return 1,2 a, b = test() 1 2 a, _ = test() 1 # 说明 a, _ = test() 中 返回的是一个int类型 后续可直接运算 # a, b = test() 返回值一个元组, 直接运算报错  ...
  • 关于函数返回值种情况

    千次阅读 2012-11-10 18:46:37
    关于函数返回值种情况  在一个函数的内部,return的时候返回的都是一个拷贝,不管是变量、对象还是指针都是返回拷贝,但是这个拷贝是浅拷贝。 分为以下种情况:1)返回一个基本类型的变量;2)返回非动态...
  • 关于函数返回值有的情况

    千次阅读 2016-09-07 21:34:06
    函数的输出参数多个怎么办?...a除以b的结果由两部分组成:商(quotient) 和余 数(remainder) ,第一个函数有两个输入参数a和b,返回一个result类型的结果。result是 一个结构体,它两个成员变量quotie
  • c语言函数返回值问题

    千次阅读 2017-04-23 22:00:06
    C语言中,调用函数结束时,如果有返回值,会涉及到函数返回值传递问题,根据返回值的大小,会不同的处理方式。 返回值小于等于4字节 函数执行完毕后,如果返回值小于等于4字节,则会将值保存在寄存器eax中...
  • 调用函数 baseStation.flow(newList[i].element_name...我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下点新功能,帮助你用它写博客: 全新的界面设计 ,将会...
  • Lua函数的多个返回值

    千次阅读 2016-09-20 15:23:07
    Lua中的函数一个很特殊也很有用的性质,即可以个返回值。包括一些内置的函数就是这样。比如string.find函数,在给定的字符串中查找一个pattern,如果匹配的部分,则返回对应的头、尾的两个索引值;如果不...
  • 1 致谢 感谢网友honglei.chen的回答, ...今天在用MATLAB完成 Machine Learning中的作业,遇到一个小问题,就是在使用max()函数时,我只需要获得当前矩阵所有行向量的最大值的索引,而不需要获...
  • 拿JS异步函数返回值种方式

    万次阅读 2018-08-31 13:54:13
    在我们的编码过程中,为了满足业务需求,经常...1,通过回调函数的方式来拿返回值,这想必大家不会陌生 function getSomething(cb) { var r = 0; setTimeout(function() { r = 2; cb(r)//回调函数 },10) }...
  • C语言函数个返回值

    千次阅读 2020-04-21 20:40:50
    但是c语言规定一个函数只能返回一个值,也就是说我们不能用return一个变量的方式返回多个值。那该怎么办呢? 其实很简单,结构体轻而易举实现这个功能。下面附上小小的demo: #include<stdio.h> typedef ...
  • C语言中如何从一个函数获取两个及两个以上的返回值 方法一:设置全局变量,这样你在形参中改变全局变量,在实参中也会有效。所以你可以在形参中改变多个全局变量的值,那么在实参中就相当于返回多个值。 方法二:...
  • main中第二步执行时首先调用复制构造函数对应传入的对象b生成一个临时对象(temp),return时再次调用复制构造函数生成一个临时对象用于返回,然后temp析构,按书上说的此刻程序就走完了,但是在main中这一步Example...
  • 函数指针,指针函数返回值为指针的函数

    万次阅读 多人点赞 2017-06-08 21:23:17
    在学习C语言时,一个比较容易混淆的概念就是函数指针、指针函数返回值为指针的函数。本文将对这三个概念进行区分。指针函数就是返回值为指针的函数,两个本质上是同一事物,只是叫法不同。函数指针就是一个指向...
  • 函数返回值 返回引用

    千次阅读 2016-07-27 11:27:10
    先看看该链接讨论的问题作为热身。...函数返回值时会产生一个临时变量作为函数返回值的副本,而返回引用时不会产生值的副本,既然是引用,那引用谁呢?这个问题必须清楚,否则将无法理解返回引用到底是个什么概
  • recv函数返回值总结

    万次阅读 2017-07-25 16:13:44
    函数原型:int recv( SOCKET s, char *buf, int len, int flags) 功能:不论是客户还是服务器...参数二:指明一个缓冲区,该缓冲区用来存放recv函数接收到的数据; 参数三:指明buf的长度; 参数四 :一般置为0。
  • python函数个返回值

    万次阅读 2018-09-21 14:45:56
    比如在游戏中经常需要从一个点移动到另一个点,给出坐标、位移和角度,就可以计算出新的新的坐标: import math def move(x, y, step, angle=0): nx = x + step * math.cos(angle) ny = y - step * math.sin...
  • 能否忽略python多个返回值中的一个? 假设我有一个Python函数,它在一个元组中返回多个值: def func(): return 1, 2 是否一种好的方法可以忽略其中一个结果,而不只是将其赋值给一个临时变量?如果我只对第一个...
  • 函数可以个返回值?初探神奇的fork()函数

    千次阅读 多人点赞 2018-03-20 21:21:13
    一个函数返回值两个 一个很简单的选择分支结构,学过基本语法的都知道,如果走if,就不会走else if. 当然,那是没有碰到fork()函数的时候. 为什么呢? 我们编译运行一下代码来观察结果. 发现两个printf都被...
  • 因为页面要返回好次后台,为了减少代码,将ajax封装成了一个方法,但后台返回数据不同,对返回数据不同的操作,所以就需要将ajax返回数据最为函数返回值,开始代码如下: function xxx(data,url){ var result;...
  • python自定义函数返回值调用

    千次阅读 2013-10-10 10:40:33
    自定义函数: 无返回值类型;无形参类型 def function_name(parameter): 代码行 ...可以传return返回值 ...(有几个return返回值,就要在调用函数时定义几个变量,把return返回值都保存下来)
  • 函数返回值种情况

    千次阅读 2012-04-08 21:00:19
    一个函数的内部,return的时候返回的都是一个拷贝,不管是变量、对象还是指针都是返回拷贝,但是这个拷贝是浅拷贝。   1. 如果返回一个基本类型的变量,比如: int a; a = 5; return a;   ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 479,056
精华内容 191,622
关键字:

一个函数有几个返回值