为什么Python函数可以返回本地声明的数组,但C不能?

jer*_*iff 3 c python arrays pointers

我正在读这个问题:无法返回int数组,因为我遇到了同样的问题.

似乎在函数内本地声明的数据结构(因为C显然可以返回本地声明的变量)不能返回,在本例中是一个数组.

然而,Python不会遇到同样的问题; 据我所知,可以在函数中声明一个数组并返回该数组而不必将其作为参数传递.

引擎盖下有什么区别?Python是否隐式使用指针(在函数中使用malloc)?

Sha*_*ger 5

对于记录,Python的内置可变序列类型称为a list,而不是数组,但它的行为类似(它只是动态可调整大小,如C++的std::vector).

无论如何,你是正确的,所有Python对象都是隐式动态分配的; 只有它们的引用(粗略地,指针)在"堆栈"上(也就是说,Python解释器堆栈和C级堆栈与开始时不一样).可比较的C代码将动态地分配数组并返回指向它的指针(free完成后调用它;不同的Python解释器以不同的方式处理它,但是list当不再以某种方式引用时将被垃圾收集).

Python没有"堆栈数组"的真正概念(它总是返回单个对象,尽管该对象可能是tuple模拟多个返回值),因此返回总是最终是一个"指针"值(对返回对象的引用) .