配列などの値の変更

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
匿名

配列などの値の変更

#1

投稿記事 by 匿名 » 17年前

a[10];などの変数にすべて0を代入する場合、初期化では int a[10]={0}; とでも書けばすべてに0が入りますが一度タイトル画面に戻って再びゲーム開始、と言う時にこういう配列にひとつひとつ0を代入していくのは大変ですよね。今回はグローバル変数なので再宣言もできません、唯一思いつくのはすべてに0が代入されている構造体との値渡しぐらいです。なにか簡単にすべてに0を代入する方法は無いでしょうか。

御津凪

Re:配列などの値の変更

#2

投稿記事 by 御津凪 » 17年前

単に値を 0 にするなら memset 関数を使えばOKです。
memset(a,0,sizeof(a)); // a は初期化する配列
もし、初期値として 0 以外の数値を入れるのであれば、
あらかじめその初期値データを用意しておき、 memcpy 関数を使います。
memcpy(a,b,sizeof(a)); // a は初期値を格納する配列、b は初期値があらかじめ入っている配列
こんな感じでしょうか。

box

Re:配列などの値の変更

#3

投稿記事 by box » 17年前

> 再びゲーム開始、と言う時にこういう配列にひとつひとつ0を代入していくのは大変ですよね。

そんなに大変なことでしょうか? 大変さの想像がつきません。
ループを所定の回数だけ回しながら初期化すればいいだけのことです。

匿名

Re:配列などの値の変更

#4

投稿記事 by 匿名 » 17年前

すいません
memcpy(a,b,sizeof(a));
のsizeofはなんですか?


匿名

Re:配列などの値の変更

#6

投稿記事 by 匿名 » 17年前

多分わかったと思います。ちなみにmemcpy(a,b,sizeof(a));であって
memcpy(a[n],b[n],sizeof(a[n]));ではないんですね。

御津凪

Re:配列などの値の変更

#7

投稿記事 by 御津凪 » 17年前

memcpy(a[n],b[n],sizeof(a[n]));
だと、
a[n] = b[n];
と同じになってしまいます。

匿名

Re:配列などの値の変更

#8

投稿記事 by 匿名 » 17年前

よくわかりました、ところで上には初期値と書かれていますが宣言した後でも可能でしょうか?

御津凪

Re:配列などの値の変更

#9

投稿記事 by 御津凪 » 17年前

たとえば、
int b[3] = {0,1,2};
とした、b の配列値を初期値とすると、 memcpy (memset では無いですよ)を使用して b からコピーすれば可能です。

もちろん、 b の値を変更した後でコピーすれば、その値になります。

匿名

Re:配列などの値の変更

#10

投稿記事 by 匿名 » 17年前

よくわかりました。どうもありがとうございます。

閉鎖

“C言語何でも質問掲示板” へ戻る