c,c++函数返回多个值的方法
最近遇到一个问题,需要通过一个函数返回多个值。无奈C,C++不能返回多个值。所以就想有什么方法可以解决。
网上方法比较杂乱,一般有两种替代做法:
1. 利用函数的副作用, 返回值在函数外定义, 在函数内修改, 一般为void函数。
例1.1输入x,y求修改后的x,y
- #include<iostream>
- using namespace std;
- void swap(int *p,int *q)
- {
- int temp;
- temp=*p;
- *p=*q;
- *q=temp;
- }
- int main()
- {
- int a,b;
- cin>>a>>b;
- cout<<"the num is :"<<a<<b<<endl;
- swap(a,b);//swap(&a,&b);
- cout<<"the sorted num is :"<<a<<b<<endl;
- }
例1.2输入a,b,c求x,y,z
略
例1.3输入x[]求修改后的x[]
- #include<stdio.h>
- #include<stdlib.h>
- void *bbb(int *p1)
- {
- int i=;
- while(i<)
- {
- *p1+=;
- *p1++;
- i++;
- }
- }
- void main()
- {
- int a[]={,,,};
- bbb(a);
- int i=;
- while(i<)
- {
- printf("%d\t",a[i]);
- i++;
- }
- }
例1.4输入x[]求y[]
略
2. 把返回值打包返回,如返回一个数组名,指针,结构体.
例2.1返回一个数组名
- #include<stdio.h>
- #include<stdlib.h>
- int *aaa(int a[])
- {
- int i=;
- while(i<)
- {
- a[i]+=;
- i++;
- }
- return a;
- }
- void main()
- {
- int *p;
- int a[]={,,,};
- p=aaa(a);
- int i=;
- while(i<)
- {
- printf("%d\t",a[i]);
- i++;
- }
- }
例2.2返回一个指针
- #include<stdio.h>
- #include<stdlib.h>
- int aaa(int *p)
- {
- int i=;
- while(i<)
- {
- *p+++=;
- i++;
- }
- return p;
- }
- void main()
- {
- int *px;
- int a[]={,,,};
- px=aaa(a);
- int i=;
- while(i<)
- {
- printf("%d\t",a[i]);
- i++;
- }
- }
例2.3返回一个结构体
略
(被“略”的地方如果谁有兴趣可以自己去试着写一个)
带返回值的函数需要用一个指针接受,而接收的也是之前主函数里定义的变量的地址。即只要函数被调用了,变量的值就改变了,根本不需要在定义一个指针变量来接收,从这可以得出,有返回值的函数都可以改成void()型函数。(即例2.2可以简写成例1.3)
综上
可以看出,无论你怎么返回,无论你返回不返回,几乎都需要用到指针。可能有人会说用纯数组也可也实现,LZ以前也用数组,但现在觉得以前很愚蠢,原因会用指针的人都知道吧。其实上面的众多方法说白了也就一句话:
利用指针。
指针很强大,LZ以前贪玩,没怎么学,最近学C,又捡起来看了一下,一定要把这个学会。用好。
c,c++函数返回多个值的方法的更多相关文章
- C# 函数返回多个值的方法
有时候我们需要一个函数返回多个值,网上更多是用out实现,我个人很喜欢用tuple方法. tuple是一个元组,最多支持7个元素,再多需要嵌套等方法实现. 使用元组定义函数的方法如下: public ...
- C++引用形参,函数返回多个值
之前编代码有遇到过想让一个函数返回多个值的情况,low low的我不知道有什么办法,直接使用的全局变量将函数里的值传出去. 今天看书,<C++primer>第五版中文版第189页:使用引用 ...
- PHP自定义函数返回多个值
PHP自定义函数只允许用return语句返回一个值,当return执行以后,整个函数的运行就会终止. 有时要求函数返回多个值时,用return是不可以把值一个接一个地输出的. return语句可以返回 ...
- python学习笔记(九)函数返回多个值,列表生成式,循环多个变量,入参格式声明
一.函数返回多个值 1.函数如果返回多个值的话,它会把这几个值放到一个元组里面2.函数如果返回多个值的话,也可以用多个变量来接收 def say(): num1 = num2 = num3 = ret ...
- Android JNI编程(三)——C语言指针的初步认识、指针变量、互换两个数、函数返回多个值
版权声明:本文出自阿钟的博客,转载请注明出处:http://blog.csdn.net/a_zhon/. 目录(?)[+] 一.什么是指针? 简单来说: 指针就是内存地址 内存地址就是指针. ...
- C++ 利用指针和数组以及指针和结构体实现一个函数返回多个值
C++ 利用指针和数组实现一个函数返回多个值demo1 #include <iostream> using namespace std; int* test(int,int,int); i ...
- C语言中函数返回字符串的4中方法
C语言中函数返回字符串的4中方法 函数的构成部分:返回类型.函数名称.参数.函数主体 参数:函数调用时传入的参数称为实参,函数定义时出现的参数为形参 形参的作用在于接收实参传入的值,形参和函数内部的其 ...
- 函数返回多个值(c/c++)
当我们在处理一个数组的时候常常会碰到这样的问题:输入一个数组,和数组的一个元素,返回该元素所在行数和列数.这样就需要返回多组两个值,且组数不定.上述类型的函数在c语言程序里面存在两个问题.第一,函数只 ...
- Go语言示例-函数返回多个值
Go语言中函数可以返回多个值,这和其它编程语言有很大的不同.对于有其它语言编程经验的人来说,最大的障碍不是学习这个特性,而是很难想到去使用这个特性. 简单如交换两个数值的例子: package mai ...
随机推荐
- Flask框架学习笔记(API接口管理平台 V1.0)
今天博主终于完成了API接口管理平台,最后差的就是数据库的维护, 博主这里介绍下平台的设计原理,首先基于python,利用flask的web框架+bootstrap前端框架完成,先阶段完成了前台展示页 ...
- git 仓库操作
一.git 仓库从远程clone 首先要建立一个本地空目录文件比如 RuntimeJsonModel,然后: 1. git init 2. git clone https://github.com/G ...
- 【测试】使用hr用户下的employees和departments表写一条SQL语句,(MG连接)
SQL> select * from employees d, departments t where d.department_id=t.department_id; rows selecte ...
- 第三方登录 QQ登录 人人网登录 新浪微博登录
http://www.pp6.cn/Index.aspx http://www.pp6.cn/Login.aspx 网站有自己的账号系统,这里使用的第三方登录仅仅是获取第三方账号的唯一id,昵称,性别 ...
- 设置Eclipse自动跳转到debug模式的小技巧
默认情况下,eclipse中右键debug,当运行到设置的断点时会自动跳到debug模式下.但由于我的eclipse环境,从开始一直用到现在,中间包括装.卸各种插件,更换版本,从英文界面导到中文界面又 ...
- 【Nginx 3】FTP远程文件下载
导读:在做项目的过程中,当用户发起申诉时,要上传一个申诉材料.然后后台运营人员在处理申诉时,可能会需要下载申诉材料,进行参考.本篇博客呢,就介绍一下文件的下载! 一.代码实现 <span sty ...
- curl返回常见错误码
转自:http://blog.csdn.net/cwj649956781/article/details/8086337 CURLE_OK() 所有罚款.继续像往常一样. CURLE_UNSUPPOR ...
- C# 多线程---------<一>
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- PHP超时处理全面总结(转)
[ 概述 ] 在PHP开发中工作里非常多使用到超时处理到超时的场合,我说几个场景: 1. 异步获取数据如果某个后端数据源获取不成功则跳过,不影响整个页面展现 2. 为了保证Web服务器不会因为当个页面 ...
- java Literals
Primitive Data Types The Java programming language is statically-typed, which means that all variabl ...