c语言函数返回数组指针
⑴ 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
(1)c语言函数返回数组指针扩展阅读:
注意事项
1、数组宏棚的维度必须是一个常蔽段则量表达式
int main(void)
{
constexpr int i = 20;
int j = 5;//不是常量表达式
int arr1[i];//正确
int arr2[j];//错误
system("燃宏pause");
return 0;
}
2、默认情况下,数组的元素被默认初始化。
而且需要注意的是,和内置类型的变量一样,如果在函数内部定义了某种内置类型的数组,那么默认初始化会令数组有未定义的值。
⑵ C语言函数如何return数组
数组在作为函数返回值或者函数参数时,实际上只作为指针来返回或者传递的。因此返回值用指针数据类型。比如下面的代码:
intg_a[4]={1,2,3,4};
int*retn_arrary()//返回值用指针类型即要。
{
returng_a;
}
⑶ C语言数组指针
int (*pstu)[4];为指向有4个元素的数组的指针
int* getPosPerson(int pos, int (*pstu)[4]);为返回值为指针的函数
注意这是指针函数,而不是函数指针,后者为指向函数的指针变量,两者含义是不同的
(类似指针数组和数组指针,两者含义也是不同的,一个本质是数组,一个本质是指针)
调用该函数的语句为:ppos =getPosPerson(pos,scores);
传入的scores表示3行4列的二维数组首行数组的地址,即&scores[0]
调用后相当于int (*pstu)[4]=scores,所以在getPosPerson中pstu与scores是等价的
即pstu可看作&scores[0],那么pstu+pos也就等价于scores+pos,等价于&scores[pos]
即返回了指向&scores[pos](也就是scores第pos+1行的地址)的指针
返回该行指针ppos后,就可以查看该行表示的学生的4科成绩了
⑷ c语言 函数返回数组指针
由于你在子函数int *shuzu(void)中定义的数组 a[4];属于局部变量,在子函数结束时会被释放,所以返回的指针变成野指针,会乱码;简单的解决方法有两种,1. 将数组定义在主函数之前(#include <stdio.h>下面),那么就变成了全局变量,不会被释放了;2.使用malloc或者calloc开空间后再赋给这个数组,这样也不会被释放了;第一种方法有缺点,以后学到全局变量的时候会知道,第二种方法估计你还没学到,不过很简单,网络一下就会了~~~
⑸ C语言调用数组返回数组怎么做
#include <stdio.h>
#define MIN(x,y)
int * add_1();
main()
{
int * p = add_1();
int b[5];
for(int i=0;i<5;i++)
{
b[i] = *(p+i);
}
for(i=0;i<5;i++)
{
printf("%d",b[i]);
}
}
int * add_1()
{
int static a[5]={1,2,3,4,5};
return a;
}
(5)c语言函数返回数组指针扩展阅读:
注意事项
一、该数组不能是返回函数的局部变量数组,因为局部变量数组在退出函数后会被释放。
可以是全局变量,静态局部变量,动态分配内存,以及从函数参数传过来的数组地址。
二、返回指针时,无法返回长度,所以需要其它方式传回数组长度,以下是几种常用的方法。
1、约定固定长度。
2、以函数参数返回数组长度。
3、将长度保存在全局变量中。
4、约定数组结束标记。
5、在数组中存储数组长度,如存在第一个元素中。
有些时候需要子函数将一个数组返回出来,通常是两种方法,一种是靠指针,另一种是结构体。
例如指针:
#include <stdio.h>
char *test(char *tmp)
{
return tmp;
}
void main(void)
{
printf("%s",test("第一个测试例子 "));
}
⑹ C语言怎么让“函数”返回“指针数组”
你好
从问题来看,似乎你对于指针的概念没太理解。指针变量中存储的是内存中的地址,而实际的数据放在这个地址中。
按照这段代码来说,int* 声明的指针指向内存中的一块地址,而在这块地址中存储着一个整形数值。所以要返回这样的值,也就相当于是返回一个内存地址。因此,在程序中有两种具体的解决办法:
1.在调用函数的时候,直接将变量的指针(即内存地址)作为参数传入,在函数执行的时候,就会自动对内存中相应地址的数据进行操作。使用这种方法也就不需要返回值了。具体到这段代码中,就是在Main中声明int* tempA[10],把foo函数声明为void foo(int* a[10]),调用时用foo(tempA),在foo函数中直接使用a[10]即可。
2.直接把内存地址作为返回值,因为在C中,数组名就是数组首元素的指针,因此直接返回数组名就可以了,即return a即可。如果是普通变量,要用取内存地址的运算符&,比如声明了整型变量 int i,就可以return &i。这与printf函数中的使用方法是相通的。
【按照补充的内容:】
a-------->a1-------->i1
|-------->a2-------->i2
|……………………
|-------->an-------->im
这样的调用方法,只能保证a1-an不被修改,怎么保证i1-im不被修改?
希望以上回答能帮到你。【PS.很久没用C了,如果哪里出了差错,请指正。】