【发布时间】:2018-05-23 17:35:32
【问题描述】:
我正在尝试找出在 C 和 Java 中创建长度在运行时(例如,通过用户输入)确定的数组的方法。
在 C 中,我知道某些版本的 C 标准(例如 C99)现在允许以下方式:
int size;
scanf("%d",&size);
int arr[size];
但是,理论上,像这样在 C 中创建动态数组是不可接受的。全局解决方案是在 C 中使用 malloc()。
我的问题是,在 Java 中呢?我在自己的计算机上运行了以下 Java 程序,没有产生错误。但我不确定它是否仅适用于特定的 Java 平台(如 C 案例中的 C99)还是在所有 Java 中都可以普遍接受
import java.util.Scanner;
public class Main{
public static void main(String[] args){
int size;
System.out.println("enter a number:");
Scanner s = new Scanner(System.in);
size = s.nextInt();
int[] arr = new int[size];
}
}
【问题讨论】:
-
我认为以这种方式分配数组大小没有任何问题
-
@YassinHajaj No. c99 是 C 标准的一个版本。其他C标准包括c11等
-
Java 中数组的行为和工作方式已完全指定,请参阅Java Language Specification version 10, chapter 10。坦率地说,我很惊讶你甚至认为 Java - 一种完全托管的语言 - 会以某种方式跳过数组。
-
int arr[size];不是动态数组。它是一个自动数组,其大小在运行时确定。自动对象的生命周期仅延伸到执行离开声明它的块的那一刻。动态对象在显式被释放之前一直存在。