问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

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

发布网友 发布时间:2022-04-20 04:04

我来回答

5个回答

热心网友 时间:2023-08-31 20:45

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

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

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

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

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

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

热心网友 时间:2023-08-31 20:46

建立数组,返回指针。

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

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

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

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

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

扩展资料

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

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

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

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

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

热心网友 时间:2023-08-31 20:46

在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则用于告诉调用者返回的数组的大小。
这样就不会出现数组越界的情况了。
当然如果是调用者误操作,那是无法避免的情况了

热心网友 时间:2023-08-31 20:47

主要可以通过指针或数组返回多个值,测试代码如下,

//程序功能,通过结构体实现多个数据返回及通过多个变量指针实现
#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变量直接返回。

热心网友 时间:2023-08-31 20:47

可以有很多方法实现
你可以不使用数组,使用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]);
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
淄博莲池医院豪华产科病房怎么样? 淄博莲池医院诊疗设备 淄博莲池医院地理位置 信息安全领域有哪些工作 12平方1000米减30公顷等于几公顷 姓黄 男孩 2012年农历八月二十九 21点36分出生 求大师看下八字五行... ...8月19日)下午2点40出生,求个好听的名字,父亲姓黄,母亲姓徐。_百度知... 请大师们帮我儿子起名,2013蛇年二月二十九农历出生,23点47分生下一个... 请帮忙起名 男孩姓黄 今年农历五月二十九出生,第二字最好带“山”字... 根据自己阅读的书制作一份手抄报 阅读的手抄报 肠胃蠕动不好怎么样可以调理 C语言返回结构体函数返回值应定义哪种类型? C语言中函数的返回值可以一个结构类型吗? 肠胃不蠕动 便秘是什么原因造成的呢 C语言如何返回结构体数组 肠胃蠕动慢喝粥可以吗 C语言函数中如何返回一个结构体类型 肠胃蠕动差怎么办?大神们帮帮忙 求高手指教c语言函数怎么返回结构体 肠胃蠕动不好怎么办 c语言函数能不能返回结构体 肠胃不好的人喝什么饮料好? 肠胃不好吃什么或喝什么有益? 胃肠蠕动慢喝什么牛奶好 肠胃蠕动慢喝酸奶有用吗? 肠道蠕动慢怎么调理 胃肠道动力不足便秘怎么办 肠胃蠕动慢喝酸奶有用吗 肠胃不好可以喝什么饮料 肠胃不蠕动怎么办救命 胃消化不好,肠胃蠕动不好的人该吃什么食物好? c语言中函数返回值可以是数组、字符串和结构体吗? C语言返回结构指针的函数 c语言的函数返回值? c语言结构体函数返回问题 C语言函数返回类型 请教:C语言函数的返回值类型能否为结构体 求解一个c语言函数返回结构体指针的问题 c 函数中可以返回结构体引用么? c语言中返回结构体数组 C语言返回结构的指针问题? C语言结构体函数的返回值是结构体结构体变量中的信息 c语言中怎样讲一个函数的返回值存入一个结构体中? 华为手机Gps怎么定位不了 胸前长了这样的红点是什么原因? 胸部上长了一小点红.不知是什么 胸前长的很多红点点是什么? 胸部和肚子上长了红色的小点,很痒,是什么原因? 胸前出现小红点,咋回事? 女人胸上起小红点 胸前皮肤出现红点是怎么回事