• ベストアンサー

全配列に0を入力

c言語で配列を宣言した後に、ループを使わずに 配列全体に0を入力したいのですが、そのような方法はありますか。 あれば、どのようにすればよいか教えてください。お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • jacta
  • ベストアンサー率26% (845/3158)
回答No.5

整数であればmemsetで0を埋めればよいのですが、浮動小数点数やポインタの場合、内部表現が0とは限らないので、次のような関数を使えば一応ループを回避できます。 void fill(int *array, size_t n) {  if (n > 0)  {   *array = 0;   fill(array + 1, n - 1);  } } ここで、arrayの型は必要に応じて変更してください。 例えば、double型の配列ならdouble *arrayとしてください。 あるいは、もう一つの手として、あらかじめ全要素を0で初期化した配列を別に用意しておいてmemcpyでコピーするなら、どんな型でもOKです。

ashiato-li
質問者

お礼

回答ありがとうございます。 memsetでは計算したときに違った値を出してくるときがあったので助かりました。 回答ありがとうございました。

ashiato-li
質問者

補足

一応使えているのですがポインタの部分とsize_tの指定が、よく理解できないのでよければ、この文がどのように動いているのか解説してもらえないでしょうか。

その他の回答 (11)

  • NNori
  • ベストアンサー率22% (377/1669)
回答No.1

C++でなくCならbzero(target,sizeof(target)) でできるかも。でもあんまし勧めん。 C++ではできるけど通用しない技だね。 0を入力することとメモリとして0を代入してしまうことが同じと言い切れるかどうかの問題なんだけど...

ashiato-li
質問者

お礼

回答ありがとうございます。 string.hをincludeしたのですが、bzeroを使えなかったのでこの方法はすみませんが、諦めさせてもらいます。 回答ありがとうございました。

関連するQ&A