C 景观
与 Java 等语言相反,C 不支持数组返回函数不为返回数组的函数提供直接支持。虽然可以返回数组,但过程很麻烦。这引发了有关此设计决策背后的根本原因的问题。
C 中的数组机制
要理解这一点,我们必须深入研究 C 中数组的基础知识。 C,数组名称代表内存地址,而不是数组本身。数组可以在栈 (int array[n]) 上分配,也可以在堆上 (int* array = (int*) malloc(sizeof(int)*n)) 分配,影响内存管理。
作用域和内存访问
考虑一个返回数组的假设函数:
int[] foo(args){ int result[n]; // Code... return result; }
当从该函数外部访问内存时,我们遇到一个问题。结果数组的内存不在函数调用的堆栈范围内。这就需要通过引用传递数组的非常规方法来保留内存可访问性。
Java 的方法
Java 采用不同的范例,其中所有内容都按值有效传递。然而,这些值通常表示内存地址,使得返回值实际上是带有指针的数组。 Java 自动处理内存管理,尽管存在效率问题。
C 的实用主义
C 旨在增强 C 的性能,通过避免自动内存管理而脱颖而出。这个决定影响了不直接实现数组返回函数的选择。虽然模板类可以实现这一点,但返回 C 数组仍然是一个费力的过程,与 Java 的方法一致,但没有它的便利性。
结论
C 对数组的立场 -返回函数源于对性能的担忧。尽管不提供直接支持,C 允许使用传统 C 方法返回数组,从而使开发人员能够对内存管理进行低级控制。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3