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

现在我有一个函数叫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;
}
请问我应该如何设置指针呢?

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

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

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

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

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

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

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-11-10

建立数组,返回指针。

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

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

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

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

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

扩展资料

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

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

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

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

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

本回答被网友采纳
第2个回答  2008-10-22
在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则用于告诉调用者返回的数组的大小。
这样就不会出现数组越界的情况了。
当然如果是调用者误操作,那是无法避免的情况了
第3个回答  推荐于2017-10-13
主要可以通过指针或数组返回多个值,测试代码如下,

//程序功能,通过结构体实现多个数据返回及通过多个变量指针实现
#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变量直接返回。
第4个回答  推荐于2017-09-21
可以有很多方法实现
你可以不使用数组,使用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]);
}本回答被提问者采纳
相似回答