• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

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

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

最近遇到一个问题,需要通过一个函数返回多个值。无奈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\t",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\t",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\t",a[i]);
23         i++;
24     }
25 }

例2.3返回一个结构体

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

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

综上

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

利用指针。

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


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
标准C++中有没有接口和纯抽象类的概念?(转)发布时间:2022-07-14
下一篇:
C#调用Java的WebService添加SOAPHeader验证(2)发布时间:2022-07-14
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap