首页 > 编程知识 正文

自定义函数怎么调用数组,c语言调用自定义函数

时间:2023-05-04 03:59:24 阅读:9780 作者:3035

c语言的自定义函数如何返回数组(字符串详细信息) ) ) ) ) ) ) ) ) )。

最近,我看到几个同学的问题,问:“如何用一个函数返回数组?

可以直接用自定义函数,写char *型的返回值并直接返回吗? 代码如下。

直接返回str数组名称(不需要添加。 另外,请注意很多同学都犯了这个错误)

但实际上,执行结果并不正常。 如果尝试用调用函数输出,就会发现结果不是原始内容(当然,你电脑的输出可能还不是这样)。

如下所示。

理由从str的属性开始吧。 str本身是自定义函数中的局部变量,数组中有100个字节。 其生命周期自不必说,连同其存在的函数,俨然被称为“天子一朝臣”。 调用fun函数后,系统还会回收其中的各种局部变量,当然也会回收str数组的100字节。 所以,“hello”当然你用main函数重新输出肯定已经不是原来的内容了!

怎么样,能理解吧!

但是,还没结束,同学都在继续听,为什么我要换成以下的写法呢?

下图:

是回答。 对于这种写法,str也是局部变量,但不是数组而是指针。 只有4个字节。 虽然存储了常数区域中的字符串“Hello www.dotcpp.com”,但该字符串位于fun函数中没有的常数区域,可以读取整个程序,请注意。 因此,返回,即字符串" Hello www.dotcpp.com "的起始地址,为一个数字。 实际上相当于用str手将该字符串的地址以返回值传递给p。

以前只有fun函数知道这个字符串,现在快不行了。 临死的时候,“我快不行了。 赶紧把“‘Hello www.dotcpp.com”的隐藏地址(字符串开头地址)交给main函数! ”他坦白了。

然后快马加鞭回到了main函数手里! 之后消失了…

而且,main函数获得后,你们也知道…

这样说话,大家能理解吗?

后期c语言的逆分析部分还有与此相关的原理,请更深入地学习理解。

此外,下一篇介绍了如何实现自定义函数的数组传递问题。

在前面的说明中,我想您了解了return数组的直接问题和原因,今天我们将详细介绍在函数中返回数组的常见方法。

例如,如果APP应用程序场景要解决函数之间的相互通信,则另一个函数可能需要继承在一个函数中处理的结果数据,这种情况很常见。 一般来说,归纳了以下三种。

1、直接使用全局变量:这个方法是最有用的,但是这个方法打破了函数间的通信和封装思想,所以不推荐。 不在今天的讨论范围内。

2、堆区动态内存开拓解决:在c语言中,我们通常使用malloc在堆区动态挖掘内存,利用堆区“当前打开,用完后手动回收”的特点,实现灵活的管理。 是实际开发中的常用方法,也是当今我们的主要内容。

3、调用方传递数组指针:这种方法不需要函数返回地址,调用时直接传递数组地址,委托调用方进行操作。 由于此局部变量是调用方自己的,因此即使调用方退出内存释放,该数组也不会受到影响。

在每个实验中,对于第二种方法,为了动态地开拓内存库,bank不想在前面的故事中将局部变量保存到堆栈中。 系统不是根据其生命周期自动回收,而是手动开拓、手动释放,完全可以避免问题。 例子和效果见下图:

需要注意的是,请记住用完free后掉落,防止内存泄漏!

第三种方法虽然没有向函数返回数组,但是可以解决数组通信的问题。 主要思路是在调用方定义数组,传递地址。 由于该内存属于调用方而不是调用方,因此调用方也可以在调用结束后释放内存。 例子的步骤和效果如下

关于排列使用、传递的总结,大致在以上,如果有什么疑问或问题的话请联系我!

感谢您的阅读。 我希望大家的收益多。

推荐教程: 《C语言》

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。