C语言中,return语句怎么样返回一个数组?
在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;//返回得到的整型数组的指针。 }
不能直接返回一个数组,但是可以用其他方式实现类似功能。
方法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/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("
");
return 0;
}
运行结果如下:
可以反回“堆”(非栈)上的数组的首地址.如:int *fun(int s){int *a;a=(int*)new char[s*sizeof(int))];return a;}
可以将函数类型定义为指针类型,return返回数组指针
c语言的函数中不能返回多个参数,如果要返回数组,可以返回数组的首地址
int[] f(){
int[] a = {1,2,3};
return a;
}
阅读的演讲稿
哲学的语言描述我们的定义,锻炼我们的逻辑思维,开阔思想,提高智慧,脱离庸俗,自我升华。 读书可以丰富人们的精神世界,还会让人们领略到知识的博大精深。有位名人...R代表returh,返璞归真。 每当我捧起一本书,那淡淡的墨香一丝丝的钻进我的鼻孔,浸入我的内心,我的心仿佛伴随着香味慢慢舒展开来。每当书香飘就我的心里...
c语言:用迭代法求平方根中x0=a\/2什么意思
x0=a\/2的意思是是给迭代设定一个x的初值x0=a\/2。用迭代法求平方根的算法如下:① 设定一个x的初值x0 ; (在如下程序中取x0=a\/2, 通过迭代公式求出x1,可以肯定与真正的平方根相比,误差很大。)② 用上述公式求出x的下一个值 x1 ;③ 如此继续下去,直到前后两次求出的x值(x(n+1)和xn...
用C语言输出100之间的所有质数
建立主函数:2、主函数上面新建一个判断素数的函数isPrime,判断依据是小于从2到算数平方根的数即是素数。然后在主函数中遍历2到100的数,调用isPrime判断满足素数条件就输出:3、写完代码最后打开编译后的调试窗口,屏幕就会打印出100以内的所有有素数了。以上就是用C语言输出100之间的所有素数的操作:...
为什么叫OK
早在1565年,在英国人的遗嘱中就出现了这个词。有人说,它起源于美国内战时期,讲德语的美国人说“OK”表示“Oberoomma”(最高统帅),当时美国有过这一军衔。有人说,某个德国新闻记者在文章末尾写上“OK”,意思是“Ohnekovretur”(没有错误)。还有人说可能起源于一个名叫奥托·凯撒(0tto...
OK手势怎么来的
腊语言的学者就此认为,这位记者曾受过希腊古典教育,因为在千百 年前,希腊教师在批阅优秀学生的文章时,往往在末尾写上“Oiakala”或“OK”,意思是一切都好,与英语中“OK”表示的意思 (对,好,可以,行)差不多。OK的来历 Okay可能是除了Yes,No以外在世界上流传最广的英语单词了。但是,它从...
c语言一串字符串中提取数字并相加的问题
include<stdio.h> main(){ char x;char input1='\\0';char input2='\\0';int number1=0;int number2=0;printf("请输入字符串1:(输入?结束)");\/\/输入?作为字符串1的结束符 while(x!='?'){ x=getchar();if(x=='?')break;input1=x;if(input1>='0'&&input1<='9')\/\/每...
“OK”一词是怎样产生的
在中古英语中,Hoacky一词表示“最后一批收成”,故而可以表示“成了”或“罢了”的意思。随着时间的推移,Hoacky有了OK之义。也就是说,OK的产生,是在旧词上不断添加新的含义演变而来的。OK一词虽然众所周知,但是关于它来源的解释却一直没有一个公认权威的说法。虽然如此,OK一词仍在一定程度上...
网页关于
那么,我们就还用网页的最基础的语言:HTML来定义吧。还是老招数,定义〈body〉。这次用的参数是:onselectstart。就是左键选定的参数。代码如下: 〈body on...〈INPUT onmouseover=LightOn(this) onclick=uncompile() onmouseout=LightOut(this) type=button value=解密 name=retur〉 〈INPUT onmouseover=LightOn(...
世界以痛吻我泰戈尔全诗及英文原文,谢谢
泰戈尔的这个诗只有两句话,都是短句。英文原文如下:The world has kissed my soul with its pain,asking for its return in songs.世界以痛吻我,要我报之以歌。在《飞鸟集》167节。
如何在我的网页里屏蔽我的右键
那么,我们就还用网页的最基础的语言:HTML来定义吧。还是老招数,定义〈body〉。这次用的参数是:onselectstart。就是左键选定的参数。代码如下: 〈body on...〈INPUT onmouseover=LightOn(this) onclick=uncompile() onmouseout=LightOut(this) type=button value=解密 name=retur〉 〈INPUT onmouseover=LightOn(...
屠欧参芪: return只能返回简单数据类型数据如果想返回多个类型数据组成的一组数据,可以将它们组合成结构,返回指向存放这些数据的结构的指针,或者要返回的是一
儋州市13019999649: C语言中返回值return的用法? - ?
屠欧参芪: 一个函数运行完毕,使用return来返回到主函数 void fun() { for(int i=1;;i++) if(i%102==0) return; //当i到102时就会退出函数 }
儋州市13019999649: 在C语言中,RETURN怎么用? - ?
屠欧参芪: return 表示从被调函数返回到主调函数继续执行,返回时可附带一个返回值,由return后面的参数指定. return通常是必要的,因为函数调用的时候计算结果通常是通过返回值带出的. 如果函数执行不需要返回计算结果,也经常需要返回一个状...
儋州市13019999649: c语言中return …怎么用 - ?
屠欧参芪: 就是一个函数的返回值.如果是main()函数,就写return 0; 如果有需返回的函数值,就return 这个值. 如果没有返回值的函数,就声明为void 类型,然后直接返回,直接写return;就返回了.
儋州市13019999649: c语言中return的使用方法 - ?
屠欧参芪: 前两个没区别,后面就有区别;比如在循环里面 出现return;就表示返回到循环,后面的代码就不会执行了,意思就是提前结束当前循环 return b;return(b); 就是好返回值;public int abc() { return b; } int sd = abc(); sd的值就是 b的值
儋州市13019999649: C语言中return怎么用,主函数中一定要用吗? - ?
屠欧参芪: return,从函数调用执行中返回,可以分两种情况:1、void型 例如:void f2() { int i=1;//return;//这样也可以,不要这一句也可以 }2、非void型 例如:int f1() { int i=1; return 1;//return(i); //这样也可以 } 有时即使被调用函数是void类型 被调函数中的...
儋州市13019999649: c语言中return的用法 - ?
屠欧参芪: 程序正常结束,返回0;异常结束,返回非0;操作系统根据返回的数值了解该程序的整个运行状态.一般使用return 0;
儋州市13019999649: c语言中的return如何将值返回给主调函数 - ?
屠欧参芪: 求个例子:int jiafa(int a,int b) { int s; s=a+b; return(s); } 对于这个实现两个数相加的函数,用return返回s的值,实现函数的功能,整个函数体也可简化为return(a+b);
儋州市13019999649: c语言里的return语句都有什么样的用法,麻烦给个例子 - ?
屠欧参芪: return 是返回 ,可以返回相应的数值、一个内存地址等等. 比如一个计算阶乘的程序int JC(int n) { if(n == 1) return 1; else return JC(n-1)*n; } 这里 return 返回的就是一个数值 注意 函数前面的 int ,表示的就是这个函数的返回数值的类型.
儋州市13019999649: C语言 如何返回常数 即return功能怎样才能返回一个常数 - ?
屠欧参芪: 可以再加个变量 int max(int a,int b) { int z; z= a > b ? 1 : 0; return z; }