最近遇到一个问题,需要通过一个函数返回多个值。无奈C,C++不能返回多个值。所以就想有什么方法可以解决。
网上方法比较杂乱,一般有两种替代做法:
- 利用函数的副作用, 返回值在函数外定义, 在函数内修改, 一般为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 }
View Code
例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=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("%dt",a[i]);
21 i++;
22 }
23 }
View Code
例1.4输入x[]求y[]
略
- 把返回值打包返回,如返回一个数组名,指针,结构体.
例2.1返回一个数组名
#include<stdio.h>
#include<stdlib.h>
int *aaa(int a[])
{
int i=0;
while(i<4)
{
a[i]+=1;
i++;
}
return a;
}
void main()
{
int *p;
int a[4]={1,2,3,4};
p=aaa(a);
int i=0;
while(i<4)
{
printf("%dt",a[i]);
i++;
}
}
View Code
例2.2返回一个指针
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("%dt",a[i]);
23 i++;
24 }
25 }
View Code
例2.3返回一个结构体
略
(被“略”的地方如果谁有兴趣可以自己去试着写一个)
带返回值的函数需要用一个指针接受,而接收的也是之前主函数里定义的变量的地址。即只要函数被调用了,变量的值就改变了,根本不需要在定义一个指针变量来接收,从这可以得出,有返回值的函数都可以改成void()型函数。(即例2.2可以简写成例1.3)
综上
可以看出,无论你怎么返回,无论你返回不返回,几乎都需要用到指针。可能有人会说用纯数组也可也实现,LZ以前也用数组,但现在觉得以前很愚蠢,原因会用指针的人都知道吧。其实上面的众多方法说白了也就一句话:
利用指针。
指针很强大,LZ以前贪玩,没怎么学,最近学C,又捡起来看了一下,一定要把这个学会。用好。
原文链接: https://www.cnblogs.com/anwcq/p/C_hanshu.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/96554
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!