ページ 1 / 1
配列などの値の変更
Posted: 2008年10月28日(火) 15:12
by 匿名
a[10];などの変数にすべて0を代入する場合、初期化では int a[10]={0}; とでも書けばすべてに0が入りますが一度タイトル画面に戻って再びゲーム開始、と言う時にこういう配列にひとつひとつ0を代入していくのは大変ですよね。今回はグローバル変数なので再宣言もできません、唯一思いつくのはすべてに0が代入されている構造体との値渡しぐらいです。なにか簡単にすべてに0を代入する方法は無いでしょうか。
Re:配列などの値の変更
Posted: 2008年10月28日(火) 15:25
by 御津凪
単に値を 0 にするなら memset 関数を使えばOKです。
memset(a,0,sizeof(a)); // a は初期化する配列
もし、初期値として 0 以外の数値を入れるのであれば、
あらかじめその初期値データを用意しておき、 memcpy 関数を使います。
memcpy(a,b,sizeof(a)); // a は初期値を格納する配列、b は初期値があらかじめ入っている配列
こんな感じでしょうか。
Re:配列などの値の変更
Posted: 2008年10月28日(火) 21:23
by box
> 再びゲーム開始、と言う時にこういう配列にひとつひとつ0を代入していくのは大変ですよね。
そんなに大変なことでしょうか? 大変さの想像がつきません。
ループを所定の回数だけ回しながら初期化すればいいだけのことです。
Re:配列などの値の変更
Posted: 2008年10月29日(水) 12:47
by 匿名
すいません
memcpy(a,b,sizeof(a));
のsizeofはなんですか?
Re:配列などの値の変更
Posted: 2008年10月29日(水) 12:49
by kazuoni
Re:配列などの値の変更
Posted: 2008年10月29日(水) 12:57
by 匿名
多分わかったと思います。ちなみにmemcpy(a,b,sizeof(a));であって
memcpy(a[n],b[n],sizeof(a[n]));ではないんですね。
Re:配列などの値の変更
Posted: 2008年10月29日(水) 12:59
by 御津凪
memcpy(a[n],b[n],sizeof(a[n]));
だと、
a[n] = b[n];
と同じになってしまいます。
Re:配列などの値の変更
Posted: 2008年10月29日(水) 13:03
by 匿名
よくわかりました、ところで上には初期値と書かれていますが宣言した後でも可能でしょうか?
Re:配列などの値の変更
Posted: 2008年10月29日(水) 13:20
by 御津凪
たとえば、
int b[3] = {0,1,2};
とした、b の配列値を初期値とすると、 memcpy (memset では無いですよ)を使用して b からコピーすれば可能です。
もちろん、 b の値を変更した後でコピーすれば、その値になります。
Re:配列などの値の変更
Posted: 2008年10月29日(水) 13:34
by 匿名
よくわかりました。どうもありがとうございます。