c语言中调用函数如何返回多个值?

现在我有一个函数叫convert(inta,intb);我在主函数里面调用他,然后我想让convert函数返回一个数组,并且将其输出,请问如何实现呢,具体事例见下面。ma... 现在我有一个函数叫convert(int a, int b);我在主函数里面调用他,然后我想让convert函数返回一个数组,并且将其输出,请问如何实现呢,具体事例见下面。
main()
{int *d;
int a=b=3;
d=convert(a, b);
printf(“输出这个数组里面的每个值”)
}

convert(int a, int b)
{int c[4];
c[0]=a+b;
c[1]=a-b;
c[2]=a*b;
c[3]=0;
}
请问我应该如何设置指针呢?
展开
 我来答
八哥说科技
高粉答主

2019-11-11 · 分享科技资讯,共享科技生活
八哥说科技
采纳数:111 获赞数:78604

向TA提问 私信TA
展开全部

1、通过使用指针,在函数调用时,传递带有地址的参数,并使用指针更改其值;这样,修改后的值就会变成原始参数。

2、通过使用指针返回结果为:

3、通过使用结构:因为结构是用户定义的数据类型;可以定义一个包含两个整数变量的结构,并将更大和更小的值存储到这些变量中,然后使用该结构的值。

4、通过使用结构返回结果为:

5、通过使用数组,当一个数组作为参数传递时,基地址将传递给该函数,因此无论对数组副本所做的任何更改,都会更改为原始数组。

6、通过使用数组返回结果为:

娱乐小八卦啊a
高粉答主

2019-11-10 · 娱乐小八卦,天天都知道
娱乐小八卦啊a
采纳数:256 获赞数:117827

向TA提问 私信TA
展开全部

建立数组,返回指针。

在要返回的两个值类型相同时,可以用创建数组的方式,将要返回的值存在数组中,并返回数组首地址,这样就可以实现返回两个值的效果。需要注意的是,要返回数组首地址,那么返回的值不可以是局部变量,有如下几种是可以的:

a) 使用静态局部变量存储,并返回地址;

b) 使用全局变量存储,返回地址;

c) 函数中动态分配内存,并返回申请到的地址,此种方法需要注意,在使用后需要释放;

d) 在参数中传入数组地址,并返回。即返回的实际上是主调函数中的变量地址。

扩展资料

通常我们希望通过函数调用使主调函数能得到一个确定的值,这就是函数的返回值。函数的返回值是通过函数中的 return 语句获得的。return 语句将被调函数中的一个确定的值带回到主调函数中,供主调函数使用。

函数的返回值类型是在定义函数时指定的。return 语句中表达式的类型应与定义函数时指定的返回值类型一致。如果不一致,则以函数定义时的返回值类型为准,对 return 语句中表达式的类型自动进行转换,然后再将它返回给主调函数使用。

在调用函数时,如果需要从被调函数返回一个值供主调函数使用,那么返回值类型必须定义成非 void 型。此时被调函数中必须包含 return 语句,而且 return 后面必须要有返回值,否则就是语法错误。

如果函数有返回值,那么 return 语句后面的括号可以不要,比如“return(z);”等价于“return z;”。若不需要返回值则可以不要 return 语句。

需要强调的是,一个函数中可以有多个 return 语句,但并不是所有的 return 语句都起作用。执行到哪个 return 语句,就是哪个 return 语句起作用,该 return 语句后的其他语句就都不会执行了。

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友deebd4e0e
2008-10-22 · TA获得超过1462个赞
知道小有建树答主
回答量:1163
采纳率:0%
帮助的人:1229万
展开全部
在c语言中,返回多个值主要有两种方式
一种就像一楼所说的,返回一个数组。
但是这样做的坏处在于
调用程序者并不知道这个数组有多大,除非是某些只返回特定大小的函数,一般情况下不建议采用这种方法。
第二种是用指针返回,实例代码如下。
void exam(int *t)
{
*t = 1;
}
main()
{
int t = 0;
exam(&t);
pritf("%d",t);

}
如上代码,你会发现这个t变成1了。
这是因为你传的是指针(&是取址符),当然如果你还不知道什么是指针,那么就只能等你以后来实践这种方法了。如我上面这样的,是最简单的一个应用。当然你也可以定义下面这样的
exam(int d, int e, int *t, int *t1.....)
你可以把d,e当作普通参数,然后t和t1当参数返回。

当然你完全可以把这两种方法混合起来用
比如
int[] exam(int *size)
这里,返回一个int数组,而size则用于告诉调用者返回的数组的大小。
这样就不会出现数组越界的情况了。
当然如果是调用者误操作,那是无法避免的情况了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zyl0462
推荐于2017-10-13 · TA获得超过1082个赞
知道小有建树答主
回答量:433
采纳率:75%
帮助的人:325万
展开全部
主要可以通过指针或数组返回多个值,测试代码如下,

//程序功能,通过结构体实现多个数据返回及通过多个变量指针实现
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define PI 3.1415926
struct test
{
int x;
char str[20];
};
//返回结构体,实现多个数据返回
struct test* getTest()
{
struct test *t=NULL;
t=(struct test*)malloc(sizeof(struct test));
if(!t)
return NULL;
t->x=10;
memset(t->str,0,20);
memcpy(t->str,"testinfo",8);
return t;
}
//变相返回圆的面积、周长
void cir(double r,double *area,double *girth)
{
*area=PI*r*r;
*girth=PI*r*2;
}

int main(int argc, char *argv[])
{
double r=10.2;
double s=0,g=0;
struct test *t1=getTest();
if(!t1)
return 1;
cir(r,&s,&g);
printf("area=%f,girth=%f\n",s,g);
printf("%d,%s\n",t1->x,t1->str);
if(t1)
{
free(&t1);
t1=NULL;
}
return 0;
}

c语言函数名义上函数返回值只能有一个变量或者无返回值,但返回的变量可以是指针或结构体等更复杂的数据,通过指针或结构体从而变相实现多参数返回。可以作为实参间接返回或直接作为返回值返回,但需注意不要返回临时变量,如getTest()函数中不能定义struct test t变量直接返回。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lgw51
推荐于2017-09-21 · 超过12用户采纳过TA的回答
知道答主
回答量:54
采纳率:0%
帮助的人:38万
展开全部
可以有很多方法实现
你可以不使用数组,使用vector来做

std::vector<int> convert(int a, int b)
{
std::vector<int> c;
c.push_back(a+b);
c.push_back(a-b);
c.push_back(a*b);
c.puch_back(0);
}

或者你可以在外面定义一个数组,作为传入参数

void convert(int a, int b, int *c)
{
c[0]=a+b;
c[1]=a-b;
c[2]=a*b;
c[3]=0;
}

main()
{
int a=b=3;
int c[4];
convert(a, b, c);
for(int nI = 0; nI < 4; nI++)
printf(“数组里面的第%d个值为: %d”,nI+1, c[nI]);
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(6)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式