ページ 11

二次元配列の初期化

Posted: 2008年4月30日(水) 17:19
by カイ
質問させて頂きます。
 Borland C++を使っていて、二次元配列を宣言と同時に初期化はできるのですが、
 できれば好きなときに数値を変更したくて下記のソースを作りましたが、うまくいきません。
 (解決のために新たに作成したファイルなのでプログラム自体の意味はありません。)

エラー E2188 test.cpp 22: 式の構文エラー(関数 RESET() )
と出てしまいます。

どこが原因なのかご指導お願いします。m(_ _)m
#include "DxLib.h"
int map[2][3];
void RESET(void);

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
			 LPSTR lpCmdLine, int nCmdShow )
{
	if( DxLib_Init() == -1 )		// DXライブラリ初期化処理
	{
		 return -1;		// エラーが起きたら直ちに終了
	}

	RESET();

	DxLib_End() ;			// DXライブラリ使用の終了処理

	return 0 ;			// ソフトの終了
}

void RESET(void)
{
map[2][3]
   ={1,2,3,
     4,5,6 };
}

Re:二次元配列の初期化

Posted: 2008年4月30日(水) 18:05
by ibis
2次元配列の初期化の構文は、
int map[2][3]
 ={{1,2,3},
  {4,5,6}};
ですよ。


それから、初期化構文が使えるのは宣言した時だけなんですね。
だからRESET関数の中で初期化したいのなら、

map[0][0] = 1;
map[0][1] = 2;
//以下略

みたいに、一つずつ代入するしかないです。

Re:二次元配列の初期化

Posted: 2008年4月30日(水) 18:27
by カイ
速い返事をありがとうございます。

>>それから、初期化構文が使えるのは宣言した時だけなんですね。
そうですか…残念です。
このソースのように規則性のある初期化をする予定はないので、
最初に宣言するのが妥当みたいですね。
どうもありがとうございました。

Re:二次元配列の初期化

Posted: 2008年4月30日(水) 22:26
by lbfuvab
初期状態の配列をもう一つ用意しておき
代入するのはどうでしょう。
int map[2][3]={{1,2,3},{4,5,6}};
const int reset_map[2][3]={{1,2,3},{4,5,6}};

void reset(){
    int i,j;

    for(i=0;i<2;i++)
        for(j=0;j<3;j++)
            map[j]=reset_map[j];
}