当前位置:首页 » 编程语言 » c语言函数返回数组指针

c语言函数返回数组指针

发布时间: 2023-07-31 22:55:26

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了,如果哪里出了差错,请指正。】

热点内容
零基础学c语言第2版 发布:2025-03-26 16:42:33 浏览:623
预编译的内核 发布:2025-03-26 16:40:53 浏览:898
实现顺序查找算法 发布:2025-03-26 16:39:11 浏览:632
服务器多个ftp 发布:2025-03-26 16:34:02 浏览:355
缓解压力的花茶 发布:2025-03-26 16:30:51 浏览:246
宝马报警编程 发布:2025-03-26 16:09:04 浏览:825
一加z怎么样配置好 发布:2025-03-26 16:04:49 浏览:232
acer暗影骑士龙能装存储卡吗 发布:2025-03-26 16:04:36 浏览:310
php与lua 发布:2025-03-26 16:03:58 浏览:697
phpcurlxml 发布:2025-03-26 15:44:58 浏览:727