• 締切済み

多次元配列について

int[]a = {1,2,3} int[]a = new int[3];//は普通の配列 int[]a = {{1,2,3},{4,5,6}}; int[][]a = new int[3][3]は //2次元配列 int[]a = {{1,2,3}{4,5,6}{7,8,9}};int[][][] = new int[3][3][3]; //は3次元配列 int[][][][]a = new int[3][3][3][3]; //は4次元配列になると思いますがこっちの方はコンパイルエラーが出ないのに int[][][][]a = {{1,2,3},{4,5,6},{7,8,9},{10,11,12}}; //はコンパイルエラーが出ます どうしてですか?

  • Java
  • 回答数1
  • ありがとう数1

みんなの回答

  • shred
  • ベストアンサー率35% (25/70)
回答No.1

>int[][][][]a = {{1,2,3},{4,5,6},{7,8,9},{10,11,12}}; >//はコンパイルエラーが出ます >どうしてですか? {{1,2,3},{4,5,6},{7,8,9},{10,11,12}} が2次元配列であるからだと思います。

yuuitirou
質問者

お礼

ありがとうございます。 今、試しにしていたらそうでした 意外と簡単な事を気づかずに 考えていました。

関連するQ&A

  • 多次元配列の動的メモリ

    1次の配列aの動的メモリは例えば 「double *a;  int num = 3; //配列の数  a = new double [3];」 などとすれば確保できることは分かるのですが、 二次元配列など、多次元配列の動的メモリは どのようにすれば確保できるのですか?

  • 二次元配列で"一列"取り出すには?

    すいませんC# を勉強中なのですが、 たとえば int[,] a = new int[2,2] {            {1,2},            {3,4}         } という2x2の二次元配列があったとき 縦の列、つまり1と3だけ抜き取って配列に格納したい、または2と4だけを抜き取って配列に格納するにはどうすればいいでしょうか? 実際には配列に抜き取った後に hairetsu.Max(); でその列の最大値を出したいと考えています。 たくさん量があるとき、どうすれば簡単に列の配列を抜きとれるのでしょうか、ご存じの方よろしくお願いします…

  • 2次元配列のnew

    4x4行列のデータがいくらか書いてあるファイルから、読み込んでvector配列へ保存するプログラムを考えています。 vector配列は、float[4][4]の先頭ポインタの配列です。 宣言はこんな感じで、コンパイルエラーは出ませんでした。 vector<float[4][4]> matrix; つぎに読み込み部分で、下のような感じです。 4x4行列が見つかるたびにこれが実行されます。 GetFloatToken()は、ファイルから要素をひとつ取り出す関数です。 float m[4][4] = new float[4][4]; for(int g=0; g<4; g++) for(int r=0; r<4; r++) m[g][r]=GetFloatToken(); matrix.push_back(m); newの行とpush_backしてる行でエラーが出ました。 自分が思うに、m[4][4]のとこの、newからの受け取りの仕方が悪い気がしました。 そこで、*m[4] や **m とかにして試してみましたがうまくいきませんでした。 どうすればいいんでしょうか。 もしかして、c++では多次元配列のnewは無理なんでしょうか。 わかる方がいましたら、どうか教えてください。 補足: あとで行列の計算をするのが楽なので、float[4][4]の形は変えたくないです。 もし、多次元配列のnewが無理ということなら別の策を考えます。

  • 多次元配列は配列の配列である

    Java勉強中なんですが、参考書を読んでいて「多次元配列は、実際には配列の配列である。つまり、2次元配列(array[][])がある場合、実際にはこれをarray[0]、array[1]、array[2]、といった1次元配列に配列として扱う事ができる。」と書いてあり、例題で、 double array[][] = new double[5][]; array[0] = new double[500]; array[0] = new double[400]; array[0] = new double[300]; array[0] = new double[200]; array[0] = new double[100]; と書いてありました。これについてのこれ以上の説明はなく、理解できなくて困っています。ご教授宜しくお願いいたします。

    • ベストアンサー
    • Java
  • 二次元配列のポインタについて教えて下さい

    今日はCの配列のポインタについて質問いたします、宜しくお願いします。 1次元の配列からは、 =================================== int *p , a={1,2,3}; p = &a; printf("%d\n" , p[1] ) ; printf("%d\n" , *p[1] ) ; ===================================== でaの値がとれますが、 二次元の配列では下のような書き方ではエラーになります。 何故でしょうか、どう書いてやればいいのでしょう。 ===============================================  printf("%d\n" , pbb[1][1] ) ;  printf("%d\n" , *pbb[1][1] ) ; =============================================== 宜しくお願いします。

  • 配列

    public void test(int[] x){ ... } というメソッドに配列を渡したいとき、 test(new int[5]); は可能ですが、 int[] a = {0,1,2,1,0} という書式が可能なことから、 test( {0,1,2,1,0} ); としてみたのですが、コンパイルでひっかかります。 {}による配列生成は初期化のみに限定されているのでしょうか。 値の入った配列をこのtestに入れてやりたい場合は、 int[] a = {0,1,2,1,0}; test(a); としていかないといけないのでしょうか。

    • ベストアンサー
    • Java
  • 2次元配列でエラーがでます。

    VC++を使ってプログラムを書いています。2次元配列で配列を大きくするとエラーが出てしまいます。1次元配列の場合は今のところ特にエラーは出ない感じです。プログラムにもよりますが、小さい配列でa[300][300]くらいでエラーが出てしまいます。だいたい配列をa[10000][10000]くらい取りたいのですが。このエラーを解消する方法はないでしょう?

  • callocで二次元配列を作成するには?

    今、動的オブジェクトの勉強をしております。 動的の一次元配列の作り方として #include <stdio.h> #include <stdlib.h> int main(void) {    int *a;    int x;    printf("配列の大きさX入力>");    scanf("%d",&x);    a=calloc(x,sizeof(int));    return (0); } これでいいと思うんですが動的な2次元配列を 作りたいときはどのようにすればよろしいのでしょうか? (↓作りたい二次元配列の例(1)↓) int main(void) {    int *a;    int x , y;    printf("配列の大きさX入力>");    scanf("%d",&x);         //5と入力    printf("配列の大きさY入力>");    scanf("%d",&y);         //10と入力    上のように入力するとa[5][10]という配列が完成する } よろしくお願いします

  • 3次元配列を1次元配列に

    例えば2次元配列だと, array[row*i+j] = a[n]; といったように1次元に直すことができますよね? 同様に3次元配列を1次元配列にしたい場合には arrayの中はどのような式をつかえばいいのでしょうか。 よろしくお願いします。

  • 3次元配列の動的確保

    2次元配列は、 // 動的確保 int **mat = new int*[row]; for(i = 0; i < row; i++) mat[i] = new int[col]; //解放 for(i = 0; i < row; i++) delete [] mat[i]; delete [] mat; で、生成と開放はできたのですが、3次元となると、途端にわからなくなります。 かれこれ1時間半は試行錯誤はしているのですが、たどり着きそうにありません。 どなたかご教授願います。

専門家に質問してみよう