C语言中有没有返回数组类型的函数?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言中有没有返回数组类型的函数?相关的知识,希望对你有一定的参考价值。
看来你是还没有理解数组的概念,数组名实际上就是指向该数组第一个元素的指针,比如说:int
array[3]=1,2,3的一个数组,这里的array实际上是一个指针,指向了这个数组的第一个元素。这时候你的*array
=
1,*(array
+
1)
=2,*(array
+
2)
=
3。
这时候你应该知道,所谓的返回数组和返回指针实际上是一个概念。
int
*
retInt()
int
array[3]=1,2,3;
return
array;
实际上就是返回了一个数组。你的最后一个问题,指定数组类型,实际上只要指定指针类型就可以了。
还有一种方法就是楼上的兄弟说的了,定义一个新的数据类型存放数组,函数返回该数据类型也就相当于返回了一个数组。
(上面的函数中数组有作用域问题,仅做说明使用。) 参考技术A memcpy(ave,
average(score,p,q),
sizeof(ave));
要显式的把返回的数组数据拷贝到另一个数组中。
另外,你average函数中的aver是局部变量,你怎么能把它返回呢?这块内存在返回前就失效了。 参考技术B 没有。
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语言中有没有返回数组类型的函数?的主要内容,如果未能解决你的问题,请参考以下文章