2012-03-28 31 views
0

我尝试使用Java中的整数数组与下面的代码:如下为什么一个数组可以用一个变量初始化为java中的长度?

public static void main(String[] args) { 
     int[] array = testArray(100); 
     System.out.println(array.length); 
     for(int i = 0; i < 100; i++) 
      System.out.println(array[i]); 
    } 

    public static int[] testArray(int size){ 
     int[] array = new int[size]; 
     for(int i = 0; i < size; i++) 
      array[i] = i; 
     return array; 
    } 

我也是用C测试一个整数数组++:

 #include<iostream> 
     using namespace std; 

     void getArray(int size) 
     { 
      int array[size]; 
      for(int i=0; i<size; i++) 
       array[i]=i; 
     } 

     int main() 
     { 
      getArray(10); 
      return 0; 
     } 

,我总是得到与两个正确答案片段,为什么?因为我认为数组的长度不能像java,c和C++这样的语言变量。

+0

您期待什么错误?为什么你这个代码不应该正常工作? – Natix 2012-03-28 02:10:17

回答

4

的三种语言是不同的,并且不同的特征语言会有所不同。特别是在C99中,您可以在堆栈中定义一个变量的数组(对于那些主要编程Java的人来说,这通常用于引用不是编译时间常量的大小,而不是数组将更改大小)。

在C++中,您不能在堆栈中声明它们(GCC允许这样做,并且对模仿C99行为的语言有不符合的扩展),但是可以动态分配给定大小的new,并将指针存储一个变量。

在Java中,您无法在堆栈中创建数组,并且您所能做的只是动态分配带有new的数组并存储引用。

int size = 100; 

// C99 
int data[size]; 

// C++ 
// int data[size];   // error, but allowed by gcc 
int *data = new int[size]; 

// Java 
int[] data = new int[size]; 
+0

@NicolBolas:对,我认为是正确的,打字错误。我的意思是如果数组大小被保存在一个变量中,就像问题一样。感谢您接受它。 – 2012-03-28 12:32:41

2

Java和C是不同的语言。标准C中允许的只有动态分配(malloc/calloc)在Java中是默认允许的,因为Java中的所有数组分配都是动态; Java中缺少显式堆栈分配的概念。

+0

我只是尝试使用C++的代码,并得到没有错误,为什么?上面添加了我的C++代码。 @dasblinkenlight – 2012-03-28 02:07:37

+0

@jerry_sjtu:你正在编译GCC吗?它有一个扩展,允许不符合C++标准的C99风格的变长数组。 – 2012-03-28 02:11:06

+0

是的,我用g ++编译它。因此,当使用g ++编译时,具有作为长度的变量的数组是动态分配的,而具有固定长度的数组是静态分配的? – 2012-03-28 02:14:41

0

这里没有什么变化。通过将大小传递给创建所需大小的数组的方法来初始化数组。换句话说,不能在初始化后操作数组的大小,不像ArrayList那样可以改变大小。

+0

'size'是一个变量 – 2012-03-28 01:56:37

+0

@isbadawi那么这个问题措辞严重。 “可变长度”似乎意味着阵列的长度可以变化,但情况并非如此。 – 2012-03-28 01:59:52

+0

@torrentialcoding:我假设你来自Java背景。术语*可变长度数组*(VLA)是C标准是如何引用该构造的,isbadawi指出数组的大小是从变量读取的。 – 2012-03-28 02:17:26

2

Java中的数组长度不可变。它是在创建阵列时定义的(即,在运行时动态地),但在此之后无法更改。

此外,每个阵列具有可以被用来制造一个for循环能够通过任何长度的数组来迭代length属性:

for(int i = 0; i < array.length; i++) 
    System.out.println(array[i]); 
相关问题