【发布时间】:2021-01-26 23:57:10
【问题描述】:
我注意到了一点:例如,在 C 中,如果您在函数中有一个本地数组
*int returnArr() {
int arr[5] = {0};
return arr;
}
显然这不会编译。 C 会告诉你你正在尝试返回一个局部变量。然而在 Java 中,同样可以做到...
int[] returnArr() {
int[] arr = new int[5];
return arr;
}
它不会引起任何问题吗?为什么是这样?为什么 Java 能做到,而 C 不能?
【问题讨论】:
-
Java 有一个垃圾收集器,它只在堆栈上存储原语。其他所有内容都进入堆中。
-
@khelwood C++ 有一个
new运算符,但 C 没有! -
“显然这不会编译”——但它确实编译(除了函数返回类型中的拼写错误)。
-
@KonradRudolph 会导致分段错误
-
@Jules 如果幸运的话,是的。但它在 runtime 时这样做。
标签: java arrays c return stack