c语言中怎样返回一个数组?
首先,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;//在函数中声明自动型结构体变量sfor(i=0;i<n;s.m[i++]=i+1);//为结构体成员数组m赋值1~15for(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,只是举例),将结果赋于afor(i=0;i<15;i++)//输出看看是不是倒序了...printf("%d ",a.m[i]);printf("
");return 0;}运行结果如下:
不能直接返回一个数组,但是可以用其他方式实现类似功能。
方法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个整数:
");
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
",A[0],A[5]);
getch();
}
调试结果如下:
请输入6个整形数,以空格隔开:
5 8 9 32 -6 4
max=32,min=-6
注意:该方法适用于多个返回值的数据类型一致的情况。当返回值数据类型不一致时,不适用该方法
在C语言中,无法直接返回一个数组,但是可以通过返回对应类型指针的方式,返回数组。
在大多数情况下,一维数组和一维指针是可以通用的。
比如,定义一个函数,申请一定长度的整型动态数组,其长度用参数传入,并将结果返回。如出错,返回空指针NULL。 代码可以写成如下形式:
int *int_array_create(int n)//参数n为数组元素个数
{
int *r;
if(n<=0) return NULL;//参数错误
r = (int *)malloc(sizeof(int)*n);//申请内存空间,大小为n个int长度。
return r;//返回得到的整型数组的指针。
}
只能返回一个数,数组不能返回,以数组为函数参数传给形参时,由于是数组名传递(地址传递),实参和形参共用一段内存,对形参更改时实参的值也会改变,所以不需要返回值
动态分配一块内存,返回指针。
或者调用函数之前分配好内存,将指针传递给函数,通过指针,将数组写入,比较推荐这种方法。
或者通过全局变量 。
只能返回一个数,数组不能返回,以数组为函数参数传给形参时,由于是数组名传递(地址传递),实参和形参共用一段内存,对形参更改时实参的值也会改变,所以不需要返回值
数组不用返回吧,它一般会自动返回的!
C语言函数中怎么返回一个二维数组
1、我们首先定义一个二级指针和一个行列变量[int ** array,row,column;]。2、然后我们编写进入行和列的语句,代码如图所示。3、接下来我们可以用一维数组打开一维一维数组。4、接下来,我们使用[array [i] =(int *)malloc(sizeof(int)* column);]来为数组再次生成包含该数组的新数组。5、...
c语言中函数能返回一个数组吗
方法:以指针方式传递该一维数组的地址,然后把数组的最大值与数组的第一个元素交换,把数组的最小值与最后一个元素交换。函数被调用完毕后,实参数组中的第一元素为数组的最大值,实参数组中最后一个元素为数组的最小值,从而实现返回数组的最大值与最小值的功能。程序参考代码如下:include "stdio.h...
c语言中怎样返回一个数组?
在C语言中,无法直接返回一个数组,但是可以通过返回对应类型指针的方式,返回数组。在大多数情况下,一维数组和一维指针是可以通用的。比如,定义一个函数,申请一定长度的整型动态数组,其长度用参数传入,并将结果返回。如出错,返回空指针NULL。 代码可以写成如下形式:int *int_array_create(int n)\/\/...
C语言中,return语句怎么样返回一个数组?
首先,C\/C++只能返回数组的指针而不能返回整个数组。即使返回数组的指针,但如果函数中的数组是自动性质,那将是危险的。这是比较正宗的表述。如果确实需要从函数中返回自动性质的数组的全部元素值,有没有办法呢?有。由于C\/C++是允许返回结构体的,可以定义一个结构体模板,把数组作为成员安排在其中,...
编写一个函数,返回一个整数的位数
它定义了一个函数int digit(int n),用来返回一个整数n的位数。在main函数中,输入一个整数并调用digit函数,输出结果。include <stdio.h> \/\/定义一个函数int digit(int n),用来返回一个整数n的位数 int digit(int n){ int count = 0; \/\/定义一个计数器,初始值为0 while(n != 0){ \/...
在C语言中,返回一个字符串的函数应该怎样定义
需要返回char*类型 需要注意的是 返回的字符串 不能是该函数的局部变量,否则会导致出错 可以是参数字符串,全局变量,静态局部变量,或者动态分配的内存 比如 char *my_str_cpy(char *d, char *s){ char *p=d; while(*p++=*s++); return d;\/\/返回参数字符串。 } ...
易语言如何能让子程序返回一个整数?
“整数型”,如1,2,-5等等,或整数型的变量,方法:返回 (1)。“逻辑型”,真;假,或逻辑型的变量,方法:返回 (真)“文本型”,一对双引号中间的文本或文本型的变量,方法:返回 (“重复”)还有“小数型”、“字节型”等等。三、公开,一般是省略,单击选择(打钩),再单击省略,但用于...
C语言中如何让自定义函数返回一个字符串的地址?
同样的道理,想要返回字符串,只能把内容放在安全的地方,也就是动态内存,然后把该内存对应的地址返回就可以,就好比你把一个人的电话号码告诉另一个人,然后把你手机上的删除,另一个人也不受影响。c用malloc或者calloc,c++用new,意思就是申请一块完全由程序员管理的内存,不再使用时也需要程序员...
C语言 如何返回常数 即return功能怎样才能返回一个常数
定义函数时: int 函数名(参数...);即可返回常数……例子:int f(int a, int b){ a>b ? return(1):return(0);}
C语言中如何从一个循环返回到上一个循环
使用 goto 语句吧!int a,b;void abc(){...} main(){ AA: while(1){ a=扫描a的值 if(a<0){ ...} if(a=0){ . ...} if(a>0){ while(1){ b=扫描b的值 switch(b){ case 1: abc();break;case 2: goto AA;} } } ...
越佳龙源: C语音没有直接返回一个数组的说法,要得到一个数组的返回值,一般做法有几点:1. 传入一个指向数组指针变量,在函数内部对指针地址内的值进行修改2. 函数内部申请动态内存,将数据保存到这块内存后返回该动态内存的指针,最后需要手动释放这块内存3. 使用静态变量(这个方法不建议使用,静态、全局变量很容易导致多线程编程出问题)
长治市13043101514: C语言中如何从函数中返回一个数组 - ?
越佳龙源: 有一种方法可以做到, 例如 int *creat() { int *p=(*int)malloc( 你要的大小); return p; } 在开辟了一个数组,但到最后不要忘了使用free()把内存返回系统;
长治市13043101514: c语言中如何使返回值为数组 - ?
越佳龙源: 1、注意C/C++不能直接返回一个数组.这是由于在C/C++中,数组不是一种类型,因此不能被直接返回. 2、在C/C++中,一般有两种方法来返回一个数组. 第一种方法: 返回一个指向数组的指针,例如char (*retArray)[10]声明了一个函数...
长治市13043101514: 怎么使C语言的函数返回值为一个数组 - ?
越佳龙源: // 方法1,用静态变量进行返回 char *SubFunction(void) { static char szText[5] = "adfa"; // 用静态空间 //对p进行赋值操作 return szText; } void Caller() // 这个函数调用SubFunction { TRACE("%s\n", SubFunction); }// 方法2,用指针传递 ...
长治市13043101514: 关于c语言返回数组?
越佳龙源: 下面例子通过参数返回 #include <stdio.h> void fun(int a[5][5]) { a[3][3]=100; } int main() { int num[5][5]={0}; int i,j; for(i=0;i<5;i++) { for(j=0;j<5;j++) printf("%4d ",num[i][j]); printf("\n"); } printf("\n"); fun(num); for(i=0;i<5;i++) { for(j=0;j<5;j++) printf("%4d ",num[i][j]); printf("\n"); } }
长治市13043101514: C语言返回数组怎样表示 - ?
越佳龙源: 以数组名称作为参数,在函数内对形式参数数组所进行的操作都是在实际参数的存储空间进行的,全部都能返回给调用函数. 也就是说用数组名称作参数,在被调用函数内对该数组的所有操作,都能够自动返回.
长治市13043101514: C语言怎么让“函数”返回“指针数组” - ?
越佳龙源: 首先,你不应该返回局部变量的指针,因为局部变量在离开函数后就会被销毁.如果你想这样返回一个数组的话,你应该malloc出一个数组来返回. 至于应该return什么,return (malloc出来的那个指针)就可以了. 例如 int** foo() { int **p = (int **)malloc(sizeof(int *)*10); ... ... ... return p; } 这个p指向一个内存段,这个内存段存有十个int*类型的元素.
长治市13043101514: c语言中函数能返回一个数组吗 - ?
越佳龙源: 在C语言中,无法直接返回一个数组,但是可以通过返回对应类型指针的方式,返回数组. 在大多数情况下,一维数组和一维指针是可以通用的.比如,定义一个函数,申请一定长度的整型动态数组,其长度用参数传入,并将结果返回.如出错,返回空指针NULL. 代码可以写成如下形式: int *int_array_create(int n)//参数n为数组元素个数 { int *r; if(n<=0) return NULL;//参数错误 r = (int *)malloc(sizeof(int)*n);//申请内存空间,大小为n个int长度. return r;//返回得到的整型数组的指针. }
长治市13043101514: C语言函数中返回数组 - ?
越佳龙源: 局部变量在函数返回后自动释放所占的内存,此时系统返回的是一个任意的内存地址,你当然得不到期待的答案
长治市13043101514: 在C中如何使函数返回数组 - ?
越佳龙源: Java语言的函数可以轻易的返回一个数组,而C/C++却不能直接返回一个数组.这是由于在C/C++中,数组不是一种类型,因此不能被直接返回. 在C/C++中,一般有两种方法来返回一个数组. 第一种方法: 返回一个指向数组的指针,例如char (*retArray)[10]声明了一个函数retArray,该函数可以返回指向具有10个char元素的数组 例子如下:#include #include int (*retArray())[10]{int (*a)[10];int i=0;/*动态开辟空间*/ a=calloc(10,sizeof(int));/*赋值*/for(i=0;i