定义在函数内的数组如何返回

c语言函数中定义的数组如何返回

c语言中想要在函数中返回数组其底层实质就是返回一个指针。例如

int* fun() {
	int arr[3];
	arr[0] = 0;
	arr[1] = 1;
	arr[2] = 3;
	return arr;
}
 int main() {
	 int* p = fun();
	 for (int i = 0; i < 3; i++) {
		 printf("%d ", p[i]);
	 }
	 return 0;
}

这样的写法是错误的,arr是在fun函数中定义的它随着fun生命周期结束它也就随之销毁,它返回的是一个指针,但它里面的内容已经被销毁。
解决这种问题又三种方法

 return 0;

}
这样的写法是错误的,arr是在fun函数中定义的它随着fun生命周期结束它也就随之销毁,它返回的是一个指针,但它里面的内容已经被销毁。
解决这种问题又三种方法

语法说明
标题文本样式列表图片链接目录代码片表格注脚注释自定义列表LaTeX 数学公式插入甘特图插入UML图插入Mermaid流程图插入Flowchart流程图插入类图快捷键
标题复制

方法一:malloc函数申请堆空间

在函数中用malloc函数给arr数组在堆中申请内存,使fun函数返回的是arr在堆中的地址。虽然fun函数生命周期结束(它的变量什么的都是在栈中,函数结束栈被销毁),但arr已经通过malloc在堆中申请内存,函数结束不会对堆产生影响。但需要注意的是,在使用指针结束后,需释放它在堆中申请的内存空间,否则会造成内存泄漏。

int* fun() {
	int *arr;
	arr = (int*)malloc(sizeof(int) * 3);
    arr[0] = 77;
	arr[1] = 88;
	arr[2] = 99;
	return arr;
}

在这里插入图片描述
需要注意的是在fun函数中定义的是arr指针而不是arr数组。

方法二:satatic关键字

静态全局变量:在全局变量前加上关键字static,该变量就被定义成一个静态全局变量。
静态局部变量:在局部变量(一般为函数体内定义的变量)前加上static关键字,它就成为静态局部变量。
在该示例中我们用到的是静态局部变量,通常,在函数体内定义一个变量。程序运行到此处系统会为该局部变量分配栈内存。随着该函数结束,系统会销毁函数中所定义的变量。但有时候我们需要在两次调用之间对变量的值进行保存。通常的想法是定义一个全局变量来实现。但这样一来,变量已经不再属于函数本身了,不再仅受函数的控制,给程序的维护带来不便。静态局部变量正好可以解决这个问题。静态局部变量保存在全局数据区,而不是保存在栈中,每次的值保持到下一次调用,直到下次赋新值。在这里插入图片描述

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值