すべてのカテゴリ » インターネット・パソコン » 技術・プログラミング

質問

終了

先ほどのC++についての質問の補足です。
2次元配列で
すでに、

int a[3][3];(実際は[15][20]で配列を使っています。)

と宣言しているので
このa[x][y]の中身の値を変えるには

a[0][0]=1;
a[0][1]=2;
中略
a[2][1]=3;
a[2][2]=4;

というふうにしないといけないと思います。
中に入る値はバラバラなのでfor文などを使ってまとめて入れることはできません

なので、2次元配列の宣言時なら

int a[3][3]={
{1,2,4},
{2,5,2},
{1,3,4}
};

中身の値を簡単に入力することができるので
宣言しなおそうとしました。

でも、宣言をやり直すことはできないみたいなので

こんな風に、一度宣言した後の2次元配列に値を入力するときに
簡単に入力できる方法はありませんか?

  • 質問者:彩琉
  • 質問日時:2008-10-15 18:24:48
  • 0

回答してくれたみんなへのお礼

ありがとうございます。
うまくできました。
本当に感謝です。

int a[3][3];

int a1[3][3]={
{1,2,4},
{2,5,2},
{1,3,4}
};

int a2[3][3]={
{1,2,4},
{2,5,2},
{1,3,4}
};

memcpy( a, a1, sizeof a1 );

// 処理

memcpy( a, a2, sizeof a2 );

// 処理

では?

この回答の満足度
  
とても参考になり、非常に満足しました。回答ありがとうございました。

並び替え:

既に宣言済みの領域に、異なる複数のデータを一度に入れたいと言う訳ですね。

では、aと同じ大きさのbと言う値入りの配列を用意して、
それをそのままごっそりコピーするのが一番簡単だと思います。

int a[3][3];
int b[3][3]={
{1,2,4},
{2,5,2},
{1,3,4}
};

memcpy(a,b,sizeof(b));

  • 回答者:Maku (質問から11分後)
  • 0
この回答の満足度
  
とても参考になり、非常に満足しました。回答ありがとうございました。

ますます判らなくなってきた…

最初から、
>int a[3][3]={
>{1,2,4},
>{2,5,2},
>{1,3,4}
>};
ではダメな理由は、何ですか?
つまり、
>int a;
から、その初期化までに、何をするのか?
ってことですが。。。
----
あ!もしかして、本来の[15][20]の全部ではなくて、その一部分の[3][3]だけに入れたいのかな?
だとしたら、無理だと思いますよ、「初期化」という方法では。

この回答の満足度
  
参考になり、満足しました。回答ありがとうございました。
お礼コメント

えっとですね
繰り返しで、何回もその配列の中身を参照してるんですけど
一回繰り返すごとに中身の配列を変えているのです。

int a[x][y];
while(省略){
while(省略){
ここでa[x][y]の中身を参照しそれに伴う処理
}
ここで、a[x][y]の中身を変更
}

こんな感じになってるので

bと言う配列を作っていいのであれば、

int b[3][3]={
{1,2,4},
{2,5,2},
{1,3,4}
};
memcpy(a, b, sizeof(b));

で、bからaに値をコピーできると思います。

  • 回答者:Sooda! くん (質問から8分後)
  • 1
この回答の満足度
  
とても参考になり、非常に満足しました。回答ありがとうございました。
お礼コメント

作っても全然OKですよ。
ありがとうございます。

C++は専門じゃないので詳しくないですが、

int b[3][3]={
{1,2,4},
{2,5,2},
{1,3,4}
};
pointer(a) = pointer(b);

みないな形は出来ないですか?

インラインアセンブラがあるなら、
MOV a,b
でどうでしょう?

  • 回答者:respondent (質問から5分後)
  • 0
この回答の満足度
  
とても参考になり、非常に満足しました。回答ありがとうございました。
お礼コメント

その手がありましたね、試してみます。

関連する質問・相談

Sooda!からのお知らせ

一覧を見る