2012-03-28 14 views
0

私は以下のコードを使用してJavaでの整数配列を使用してみてください。Javaで変数を長さとして配列を初期化できるのはなぜですか?

 #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; 
     } 

そして、私は常に2つに正しい答えを得る:私も以下のようにC++における整数配列をテスト

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; 
    } 

スニペット、なぜ?配列の長さはjava、c、およびC++のような言語では可変ではないと思います。

+0

どのようなエラーがありますか?なぜこのコードが正しく動作しないのですか? – Natix

答えて

4

3つの言語は、異なっており、異なるの特徴:

また、すべての配列は、任意の長さの配列を反復するforループ可能にするために使用することができるlength性質を有しています言語は、うまく違います。特に、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

@ニコルボラス:正に、間違って入力していると思っていました。私は配列のサイズが質問のように変数に保持されている場合を意味します。それを選んでいただきありがとうございます。 –

2

JavaとCは異なる言語です。 Javaのすべての配列割り当てが動的なので、動的割り当て(malloc/calloc)がJavaではデフォルトで許可されているため、標準Cでは許可されています。 Javaから明示的なスタック割り当ての概念が欠落しています。

+0

私はC++でコードを試してもエラーは発生しません、なぜですか?私のC++コードは上記に追加されています。 @dasblinkenlight –

+0

@ jerry_sjtu:あなたはGCCでコンパイルしていますか? C++標準準拠ではない可変長配列のC99スタイルを可能にする拡張機能を備えています。 –

+0

はい、私はg ++でコンパイルします。したがって、長さが変数の配列は、g ++でコンパイルすると動的に割り当てられますが、固定長の配列は静的に割り当てられますか? –

0

ここには変数はありません。要求されたサイズの配列を作成するメソッドにサイズを渡して、配列を初期化しています。つまり、サイズを変更できるArrayListとは異なり、初期化後に配列のサイズを操作することはできません。

+0

'size'は変数です –

+0

@isbadawi問題はひどく言われています。 「可変長」は、アレイの長さが変化する可能性があると思われるが、そうではない。 –

+0

@torrentialcoding:私はあなたがJavaの背景から来たと仮定します。*可変長配列*(VLA)という用語は、C標準がその構造をどのように参照しているかを示しています。isbadawiは、配列のサイズが変数から読み取られていることを指摘しています。 –

2

Javaの配列の長さは可変ではありません。配列の作成時に定義されます(実行時にが動的に)、それ以降は変更できません。

for(int i = 0; i < array.length; i++) 
    System.out.println(array[i]); 
関連する問題