C语言中,return语句怎么样返回一个数组?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言中,return语句怎么样返回一个数组?相关的知识,希望对你有一定的参考价值。

首先,C/C++只能返回数组的指针而不能返回整个数组。即使返回数组的指针,但如果函数中的数组是自动性质,那将是危险的。这是比较正宗的表述。如果确实需要从函数中返回自动性质的数组的全部元素值,有没有办法呢?有。由于C/C++是允许返回结构体的,可以定义一个结构体模板,把数组作为成员安排在其中,函数中临时声明结构体变量,操作其中的数组;完毕后返回结构体变量,在主调函数中用同类型的结构体变量接收就可间接实现“返回一个数组”。举例代码如下:

#include "stdio.h"
struct A
int m[30];//把数组m安排在结构体A中
;
struct A fun(int n)
int i,j,k;
struct A s;//在函数中声明自动型结构体变量s
for(i=0;i<n;s.m[i++]=i+1);//为结构体成员数组m赋值1~15
for(j=n-1,i=0;i<j;i++,j--)//倒序这个数组
k=s.m[i],s.m[i]=s.m[j],s.m[j]=k;
return s;//返回结构体变量s

int main(int argc,char *argv[])
A a;//主调函数中声明同类型结构体变量a接收函数fun的返回值
int i;
a=fun(15);//用15调用fun(不要大于30,只是举例),将结果赋于a
for(i=0;i<15;i++)//输出看看是不是倒序了...
printf("%d ",a.m[i]);
printf("\\n");
return 0;

运行结果如下:

参考技术A c语言的函数中不能返回多个参数,如果要返回数组,可以返回数组的首地址 参考技术B 可以将函数类型定义为指针类型,return返回数组指针 参考技术C 可以反回“堆”(非栈)上的数组的首地址.如:int *fun(int s)int *a;a=(int*)new char[s*sizeof(int))];return a; 参考技术D int a[10];
int* fun(int *p)

for(int i = 0; i < 10; i++)

p[i] = i;

return p;

C语言中return语句怎样返回两个或多个值

请高手看看我的程序
输入两个数,输出最大值和 最大值+100。
主函数调用max函数,我想知道max函数怎样返回两个值给主函数,
我这个程序不知有什么错误,运行时我输入123,45 却输出得到Max=123,3
我这程序应怎样改?
#include "stdio.h"
void main()
int max(int x,int y,int z,int h);
int a,b,c,d;
scanf("%d,%d",&a,&b);
c=max(a,b,c,d);
printf("Max is %d,%d",c,d);

int max(int x,int y,int z,int h)
z=x>y? x:y;
return z;
h=z+100;
return h;

不好意思,程序我漏了一句,在第六句c=max(a,b,c,d);后面还有一句d=max(a,b,c,d);

return语句不能直接返回多个值。如果想通过函数内部返回多个值的话,可是使用以下代码:

#include <stdio.h>

//定义一个s

typedef struct _a

int a;

int b;

A,*PA;

//函数返回结构体变量,它里面就可以包含多个值

PA func()

PA a = (A*)malloc(sizeof(A));

a->a = 2;

a->b = 3;

return a;

int main()

PA test = func();

printf("%d %d\\n", test->a, test->b);

delete test;

return 0;

扩展资料

#include <stdio.h>

void min_max(int *ptr,int n)

int *temp;

for(int i = 0; i < 5; i++)

if(*(ptr) > *(ptr+i))

*temp = *(ptr);

*(ptr) = *(ptr+i);

*(ptr+i) = *temp;

if(*(ptr + n-1) < *(ptr + i) )

*temp = *(ptr+n-1);

*(ptr+n-1) = *(ptr+i);

*(ptr+i) = *temp;

 

int main()

int a[5];

for(int i = 0; i < 5 ; i++)

scanf("%d",&a[i]);

min_max(a,5);

printf("%d %d",a[0], a[4]);

return 0;

参考资料:百度百科  return (C语言语句)

参考技术A 哈哈,return只能返回一个值的,不可能返回两个值!

如果要返回多个值,需要通过参数传递的。

你的程序这样修改就对了:
#include <stdio.h>

int max(int x,int y)

return x>y? x:y;


int main()

int a,b,c,d;

scanf("%d,%d",&a,&b);
c=max(a,b);
d=c+100;
printf("Max is %d,%d",c,d);
return 0;


也可以这样修改:
#include <stdio.h>

void max(int x,int y, int *max,int *m100)

int m;

m=x>y? x:y;
*max=m;
*max100=m+100;


int main()

int a,b,c,d;

scanf("%d,%d",&a,&b);
max(a,b,&c,&d);
printf("Max is %d,%d",c,d);
return 0;


它不通过return返回,而是通过参数max和max100返回两个值!
它用到指针,参数采用传递地址的方式。
供参考,你应该会明白的。本回答被提问者采纳
参考技术B

return语句不能直接返回多个值。如果想通过函数内部返回多个值的话,一般有二种方法:

1、返回结构体指针

#include <stdio.h>
//定义一个s
typedef struct _a

 int a;
 int b;
A,*PA;
//函数返回结构体变量,它里面就可以包含多个值
PA func()

 PA a = (A*)malloc(sizeof(A));
 a->a = 2;
 a->b = 3;
 return a;

int main()

 PA test = func();
 printf("%d %d\\n", test->a, test->b);
 delete test;
 return 0;

2、以类型指针方式传递函数参数

#include <stdio.h>
void func(int* a, int* b)

 *a = 2;
 *b = 3;

int main()

 int a = 0;
 int b = 0;
 func(&a, &b);
 printf("%d %d\\n", a, b);
 return 0;

参考技术C /*我把楼主的稍微改了一下,一个函数里面只能有一个return语句,因为程序执行到这个return语句的时候就已经返回的,他后面的语句都不会执行。所以搂主你的max函数中虽然有两个return,但是后面一个根本就不会执行。要想让一个函数返回多个值,可以用传地址来实现,下面是这个程序*/

#include "stdio.h"

int max(int x,int y,int* z);//第三个参数传的是地址用来保存最大值加100

void main()

int a,b;
int maxLi = 0;//保存最大值加100
int maxNum= 0;//保存最大值
scanf("%d,%d",&a,&b);
maxNum=max(a,b,&maxLi);
/*函数的返回值本身就是最大值,所以可以用一个整形变量来存储他,而由于第三个参数传的是maxLi的地值,用来存放最大值加100,他与函数里面的改变是同步的,所以可以保存而不丢失,这样两个数值都得到了*/
printf("Max is %d,%d",maxNum,maxLi);


int max(int x,int y,int* z)

int tmp = 0;
tmp=x>y? x:y;
*z=tmp+100; //将tmp+100存到z里面地值(就是maxLi的地质)所表示的内存
return tmp;

参考技术D 如果不是传回地址的方法,return 一次只能传回一个值,
但你若一定想传回不同值在不同的调用,可以加一if语句。

用地址当参数传入函数

int max(int x,int y,int *z,int *h)

*z=x>y? x:y;

*h=*z+100;


调用时这样就行.
max(a,b,&c,&d);

int max(int x,int y,int z,int h)

if(z<x&&z<y)
z=x>y? x:y;
return z;

else
h=z+100;
return h;


这样当你第一次调用函数后z值为两面数中的大者,第二次调用时条件if(z<x&&z<y)不成立,就调用
else
h=z+100;
return h;

传回h

以上是关于C语言中,return语句怎么样返回一个数组?的主要内容,如果未能解决你的问题,请参考以下文章

C语言 怎么返回一个数组

C语言函数如何return数组?

C语言中用scanf和循环语句是怎么给数组一一赋值的,希望说得详细点

c语言 退出整个程序或函数的命令是啥

用vs2019编写c语言程序,明显语法错误为啥不回报错,没有加return 0;

c语言中的RETURN()返回值是啥意思?