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

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

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

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

  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[]

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

例1.4输入x[]求y[]

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

例2.1返回一个数组名

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

例2.2返回一个指针

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

例2.3返回一个结构体

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

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

综上

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

利用指针。

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

c,c++函数返回多个值的方法的更多相关文章

  1. C# 函数返回多个值的方法

    有时候我们需要一个函数返回多个值,网上更多是用out实现,我个人很喜欢用tuple方法. tuple是一个元组,最多支持7个元素,再多需要嵌套等方法实现. 使用元组定义函数的方法如下: public ...

  2. C++引用形参,函数返回多个值

    之前编代码有遇到过想让一个函数返回多个值的情况,low low的我不知道有什么办法,直接使用的全局变量将函数里的值传出去. 今天看书,<C++primer>第五版中文版第189页:使用引用 ...

  3. PHP自定义函数返回多个值

    PHP自定义函数只允许用return语句返回一个值,当return执行以后,整个函数的运行就会终止. 有时要求函数返回多个值时,用return是不可以把值一个接一个地输出的. return语句可以返回 ...

  4. python学习笔记(九)函数返回多个值,列表生成式,循环多个变量,入参格式声明

    一.函数返回多个值 1.函数如果返回多个值的话,它会把这几个值放到一个元组里面2.函数如果返回多个值的话,也可以用多个变量来接收 def say(): num1 = num2 = num3 = ret ...

  5. Android JNI编程(三)——C语言指针的初步认识、指针变量、互换两个数、函数返回多个值

    版权声明:本文出自阿钟的博客,转载请注明出处:http://blog.csdn.net/a_zhon/. 目录(?)[+] 一.什么是指针? 简单来说: 指针就是内存地址      内存地址就是指针. ...

  6. C++ 利用指针和数组以及指针和结构体实现一个函数返回多个值

    C++ 利用指针和数组实现一个函数返回多个值demo1 #include <iostream> using namespace std; int* test(int,int,int); i ...

  7. C语言中函数返回字符串的4中方法

    C语言中函数返回字符串的4中方法 函数的构成部分:返回类型.函数名称.参数.函数主体 参数:函数调用时传入的参数称为实参,函数定义时出现的参数为形参 形参的作用在于接收实参传入的值,形参和函数内部的其 ...

  8. 函数返回多个值(c/c++)

    当我们在处理一个数组的时候常常会碰到这样的问题:输入一个数组,和数组的一个元素,返回该元素所在行数和列数.这样就需要返回多组两个值,且组数不定.上述类型的函数在c语言程序里面存在两个问题.第一,函数只 ...

  9. Go语言示例-函数返回多个值

    Go语言中函数可以返回多个值,这和其它编程语言有很大的不同.对于有其它语言编程经验的人来说,最大的障碍不是学习这个特性,而是很难想到去使用这个特性. 简单如交换两个数值的例子: package mai ...

随机推荐

  1. Flask框架学习笔记(API接口管理平台 V1.0)

    今天博主终于完成了API接口管理平台,最后差的就是数据库的维护, 博主这里介绍下平台的设计原理,首先基于python,利用flask的web框架+bootstrap前端框架完成,先阶段完成了前台展示页 ...

  2. git 仓库操作

    一.git 仓库从远程clone 首先要建立一个本地空目录文件比如 RuntimeJsonModel,然后: 1. git init 2. git clone https://github.com/G ...

  3. 【测试】使用hr用户下的employees和departments表写一条SQL语句,(MG连接)

    SQL> select * from employees d, departments t where d.department_id=t.department_id; rows selecte ...

  4. 第三方登录 QQ登录 人人网登录 新浪微博登录

    http://www.pp6.cn/Index.aspx http://www.pp6.cn/Login.aspx 网站有自己的账号系统,这里使用的第三方登录仅仅是获取第三方账号的唯一id,昵称,性别 ...

  5. 设置Eclipse自动跳转到debug模式的小技巧

    默认情况下,eclipse中右键debug,当运行到设置的断点时会自动跳到debug模式下.但由于我的eclipse环境,从开始一直用到现在,中间包括装.卸各种插件,更换版本,从英文界面导到中文界面又 ...

  6. 【Nginx 3】FTP远程文件下载

    导读:在做项目的过程中,当用户发起申诉时,要上传一个申诉材料.然后后台运营人员在处理申诉时,可能会需要下载申诉材料,进行参考.本篇博客呢,就介绍一下文件的下载! 一.代码实现 <span sty ...

  7. curl返回常见错误码

    转自:http://blog.csdn.net/cwj649956781/article/details/8086337 CURLE_OK() 所有罚款.继续像往常一样. CURLE_UNSUPPOR ...

  8. C# 多线程---------<一>

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  9. PHP超时处理全面总结(转)

    [ 概述 ] 在PHP开发中工作里非常多使用到超时处理到超时的场合,我说几个场景: 1. 异步获取数据如果某个后端数据源获取不成功则跳过,不影响整个页面展现 2. 为了保证Web服务器不会因为当个页面 ...

  10. java Literals

    Primitive Data Types The Java programming language is statically-typed, which means that all variabl ...