• c,c++函数返回多个值的方法


    c,c++函数返回多个值的方法

    最近遇到一个问题,需要通过一个函数返回多个值。无奈C,C++不能返回多个值。所以就想有什么方法可以解决。

    网上方法比较杂乱,一般有两种替代做法:

    1. 利用函数的副作用, 返回值在函数外定义, 在函数内修改, 一般为void函数。

    例1.1输入x,y求修改后的x,y

     View Code
    1 #include<iostream>
     2 using namespace std;
     3 void swap(int *p,int *q)
     4 {
     5     int temp;
     6     temp=*p;
     7     *p=*q;
     8     *q=temp;
     9 }
    10 int main()
    11 {
    12 int a,b;
    13 cin>>a>>b;
    14 cout<<"the num is :"<<a<<b<<endl;
    15 swap(a,b);//swap(&a,&b);
    16 cout<<"the sorted num is :"<<a<<b<<endl;
    17 }

    例1.2输入a,b,c求x,y,z

    例1.3输入x[]求修改后的x[]

     View Code
    1 #include<stdio.h>
     2 #include<stdlib.h>
     3 void *bbb(int *p1)
     4 {
     5     int i=0;
     6     while(i<4)
     7     {
     8         *p1+=1;
     9         *p1++;
    10         i++;
    11     }
    12 }
    13 void main()
    14 {
    15     int a[4]={1,2,3,4};
    16     bbb(a);
    17     int i=0;
    18     while(i<4)
    19     {
    20         printf("%d	",a[i]);
    21         i++;
    22     }
    23 }

    例1.4输入x[]求y[]

    2. 把返回值打包返回,如返回一个数组名,指针,结构体.

    例2.1返回一个数组名

     View Code
    1 #include<stdio.h>
     2 #include<stdlib.h>
     3 int aaa(int a[])
     4 {
     5     return a;
     6 }
     7 void main()
     8 {
     9     int *p;
    10     int a[4]={1,2,3,4};
    11     p=aaa(a);
    12     int i=0;
    13     while(i<4)
    14     {
    15         printf("%d	",a[i]);
    16         i++;
    17     }
    18 }

    例2.2返回一个指针

     View Code
     1 #include<stdio.h>
     2 #include<stdlib.h>
     3 int aaa(int *p)
     4 {
     5     int i=0;
     6     while(i<4)
     7     {
     8         *p+++=1;
     9         i++;
    10     }
    11     return p;
    12 }
    13 void main()
    14 {
    15     int *px;
    16     int a[4]={1,2,3,4};
    17 
    18     px=aaa(a);
    19     int i=0;
    20     while(i<4)
    21     {
    22         printf("%d	",a[i]);
    23         i++;
    24     }
    25 }

    例2.3返回一个结构体

    (被“略”的地方如果谁有兴趣可以自己去试着写一个)

    带返回值的函数需要用一个指针接受,而接收的也是之前主函数里定义的变量的地址。即只要函数被调用了,变量的值就改变了,根本不需要在定义一个指针变量来接收,从这可以得出,有返回值的函数都可以改成void()型函数。(即例2.2可以简写成例1.3)

    综上

    可以看出,无论你怎么返回,无论你返回不返回,几乎都需要用到指针。可能有人会说用纯数组也可也实现,LZ以前也用数组,但现在觉得以前很愚蠢,原因会用指针的人都知道吧。其实上面的众多方法说白了也就一句话:

    利用指针。

    指针很强大,LZ以前贪玩,没怎么学,最近学C,又捡起来看了一下,一定要把这个学会。用好。

  • 相关阅读:
    [UML]UML系列——活动图activity diagram
    [UML]UML系列——包图Package
    UNIDAC不能识别CLIENTDATASET的TSINGLEFIELD
    UNIDAC如何驱动MSSQL2000
    delphi各个版本编译开关值
    优秀的数据序列和还原类----TSimpleMsgPack
    DELPHI方法注释的标准写法
    客户端如何通过咏南中间件调用存储过程和数据分页查询和文件传输的演示
    delphi 安卓程序如何读取外部配置文件
    调用DATASNAP+FIREDAC的远程方法有时会执行二次SQL或存储过程的BUG
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/3203138.html
Copyright © 2020-2023  润新知