当前位置:首页 » 编程语言 » c语言将函数值返回到数组中
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言将函数值返回到数组中

发布时间: 2022-05-29 11:20:49

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

主要可以通过指针或数组返回多个值,测试代码如下,
//程序功能,通过结构体实现多个数据返回及通过多个变量指针实现
#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变量直接返回。

❷ C语言如何在被调函数中返回一个数组的全部值

利用引用
可以在被调函数中改变主调函数中目标变量的值

将数组的引用当做参数
然后在函数中就可以修改数组
这样实际就相当于返回数组

❸ c语言如何返回一个数组

只能返回一个数,数组不能返回,以数组为函数参数传给形参时,由于是数组名传递(地址传递),实参和形参共用一段内存,对形参更改时实参的值也会改变,所以不需要返回值

❹ C语言中怎样把数组返回到函数值

让函数connect返回类型是第一个数组的地址就可以了 也就是说 connect是一个返回类型为指针的函数
声明的时候 char *connect
最后返回地址就可以 return 一维数组名;
其他的不用变

❺ c语言中调用函数的返回值,如果是数组,主函数要输出这个数组怎么实现啊

用指针,另外保存数据的变量退出函数时不得消失。

例如:

#include<stdio.h>

int * fun(int n)

{

int i;

static int a[100]; // 这里用static

for (i=0;i<n;i++) a[i]=i;

return &a[0];

}

void main()

{

int i,n=5;

int *p; // 声明指针

p = fun(n); // 返回指针

for (i=0;i<n;i++) printf("%d ",p[i]); // 把 p 看成数组来输出

}

得 0 1 2 3 4

(5)c语言将函数值返回到数组中扩展阅读:

注意事项

1、数组的维度必须是一个常量表达式

int main(void)

{

constexpr int i = 20;

int j = 5;//不是常量表达式

int arr1[i];//正确

int arr2[j];//错误

system("pause");

return 0;

}

2、默认情况下,数组的元素被默认初始化。

而且需要注意的是,和内置类型的变量一样,如果在函数内部定义了某种内置类型的数组,那么默认初始化会令数组有未定义的值。

❻ c语言中如何使返回值为数组

int Merge1 (int b[ ], int b1[ ], int s, int m, int t )改成int *Merge1 (int b[ ], int b1[ ], int s, int m, int t )

就是int 后面加*,这样就可以了

❼ C语言函数中怎么返回一个二维数组

1、我们首先定义一个二级指针和一个行列变量[int ** array,row,column;]。

❽ c语言中函数能返回一个数组吗

不能直接返回一个数组,但是可以用其他方式实现类似功能。
方法1:利用全局变量

分析:全局变量作为C语言的一个知识点,虽然我们都了解它的特点,但在实际教学过程中应用得并不是很多。由于全局变量的作用域是从定义变量开始直到程序结束,而对于编写有多个返回值的C语言函数,我们可以考虑把要返回的多个值定义成全局变量。当函数被调用时,全局变量被更改,我们再把更改后的全局变量值应用于主调函数中。函数被调用后被更改后的全局变量值即为函数的数个返回值。下面以一个实例演示该方法的应用。
实例1:编写函数求3个数中的最大值与最小值。
方法:把最大值、最小值分别定义成2个全局变量max、min,在用户自定义函数中把求出来的最大值与最小值分别赋给全局变量max、min。函数调用完毕后全局变量的max、min值即保存了函数要求返回的值。程序参考代码如下:
#include "stdio.h"
#include "conio.h"
int max,min;/*定义两个全局变量用于保存函数返回值*/
void max_min(int a,int b,int c) /*定义求最大最小值的函数*/
{max=min=a; /*初始化最大最小值*/
if(max if(max if(min>b)min=b;
if(min>c)min=c;
}
main()
{int x,y,z;
printf(" 请输入3个整数:\n");
scanf("%d,%d,%d",&x,&y,&z);
max_min(x,y,z) ;/*调用求最大值与最小值的函数*/
printf("三个数中的最大值为:%d;最小值为:%d",max,min);/*输出最大值与最小值*/
getch();
}
调试结果如下:
请输入3个整数:
5,-6,2
三个数中的最大值为:5;最小值为:-6
注意:该方法虽然可以实现有多个返回值的函数,但由于全局变量不能保证值的正确性(因为其作用域是全局,所以程序范围内都可以修改它的值,如果出现错误将非常难以发现),并且全局变量增加了程序间模块的耦合,所以该方法要慎用。

方法2:传递数组指针

分析:在教学过程中,我们知道C语言函数参数的传递方式有值传递与地址传递。当进行值传递时,主调函数把实参的值复制给形参,形参获得从主调函数传递过来的值运行函数。在值传递过程中被调函数参数值的更改不能导致实参值的更改。而如果是地址传递,由于传递过程中从实参传递过来的是地址,所以被调函数中形参值的更改会直接导致实参值的更改。因此,我们可以考虑把多个返回值作为数组元素定义成一个数组的形式,并使该数组的地址作为函数的形式参数,以传址方式传递数组参数。函数被调用后,形参数组元素改变导致实参改变,我们再从改变后的实参数组元素中获得函数的多个返回值。以下实例演示该方法的应用。
实例2:编写函数求一维整形数组的最大值与最小值,并把最大值与最小值返回给主调函数。
方法:以指针方式传递该一维数组的地址,然后把数组的最大值与数组的第一个元素交换,把数组的最小值与最后一个元素交换。函数被调用完毕后,实参数组中的第一元素为数组的最大值,实参数组中最后一个元素为数组的最小值,从而实现返回数组的最大值与最小值的功能。程序参考代码如下:
#include "stdio.h"
#include "conio.h"
void max_min(int *ptr,int n) /*定义求数组最大值最小值的函数,传递数组指针*/
{int i,j,k;/*j保存最大值所在位置,k保存最小值所在位置*/
int *temp;/*用于交换位置*/
*temp=*ptr;
for(i=0;i{
if(*ptr<*(ptr+i))/*最大值与第一个元素进行交换*/
{
k=i;
*temp=*ptr;
*ptr=*(ptr+k);
*(ptr+k)=*temp ;
}
if(*(ptr+n-1)>*(ptr+i))/*最小值与最后一个元素进行交换*/
{
j=i;
*temp =*(ptr+n-1);
*(ptr+n-1)=*(ptr+j);
*(ptr+j)= *temp ;}
}
}
/*调用最大最小值函数*/
main()
{
int A[6],i;
for(i=0;i<6;i++)
scanf("%d",&A[i]);
max_min(A,6);
printf("max=%d, min=%d\n \n",A[0],A[5]);
getch();
}
调试结果如下:
请输入6个整形数,以空格隔开:
5 8 9 32 -6 4
max=32,min=-6
注意:该方法适用于多个返回值的数据类型一致的情况。当返回值数据类型不一致时,不适用该方法

❾ C语言函数中返回数组

你的程序:
main()
{
int
b[3];
b=pop();
}
int
*
pop()
{
int
a[3],i;//定义的局部变量a[3]在调用完之后自动释放其空间
for(i=0;i<3;i++)
a[i]=i;
return
a;//返回的是指向数组a[3]的地址而不是数组a[3]本身
}
注:既然上面说到调用的方法返回的是指向数组a[3]的地址,所以主函数中b接收的应该是指向数组a[3]的地址,而数组a[3]在方法调用完后又被释放了,所以b接收不到数组a[3],故出错。
正确的程序:
#include<stdio.h>
main()
{
int
b[3];
pop(b,3);
}
void
pop(int
a[],int
n)//该方法传入两个参数,第一个是传入指向数组的地址,第二个参数是传入数组的长度,不需写返回语句return,只需通过指向数组的地址的传入就可以直接将数组b[]的值改变
{
int
i;
for(i=0;i<n;i++)
a[i]=i;
}

❿ 如何用C语言实现调用函数的返回值为一数组的地址

这个问题一个较为妥善的方法是把数组定义在主函数,再传入数组地址给自定义函数,如果你非要在自定义函数里定义也行,至于是否需要设置为static,那得看情况,因为函数退出时栈空间并不是马上被刷新,如果你能保证该栈空间在你访问前没被释放就没必要定义为static,但是保险起见定义static更好,因为你可能不知道到底该内存是不是被重新写入了数据,至于你说要返回指向指针的指针,我举个例子,int**
fun(),这个就是返回一个指向指针的指针,其指向的指针指向int型,呵呵,明白了没