自動変数の初期化方法

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

自動変数の初期化方法

#1

投稿記事 by 佐藤 » 1年前

C++の自動配列変数を簡単に初期化できる方法があるのでしょうか。

どの言語か忘れたが
例えば int x[100] = {0}; のような書き方で、xの諸要素が全部0になります。

C++ではこんな書き方で全要素が0になるはずはですよね。

forを使うしかないか?

梅衣堂ひよ
記事: 24
登録日時: 1年前

Re: 自動変数の初期化方法

#2

投稿記事 by 梅衣堂ひよ » 1年前

佐藤 さんが書きました: どの言語か忘れたが
例えば int x[100] = {0}; のような書き方で、xの諸要素が全部0になります。
それC++ですね。(純粋なCはわからないけど、おそらくCから引き継いだ機能です。)
まあ他にもできる言語があるかもですが。
カンマ区切りで指定した部分までは指定した数を代入するけど、指定されなかったやつらは軒並み0にさせられます。

多分0以外で同じ値をまとめていれたい場合は、for文(もしくはfor each)で代入するかmemsetでメモリの先頭アドレスとサイズを渡して一括で上書きするくらいしかなかったはずです。
結構説明が下手ですのでご了承ください。割と言葉が足りなかったり文字だらけで分かりにくかったりします。

123

Re: 自動変数の初期化方法

#3

投稿記事 by 123 » 1年前

横からすみません

{0}で初期化の有効性をどう確認すれば良いのでしょうか。

現に{0}で初期化した整数自動配列と初期化しない整数自動配列の要素をprintf()で表示して見たら、
皆0です。

なので、0になるのは偶然かどうかですね。

かずま

Re: 自動変数の初期化方法

#4

投稿記事 by かずま » 1年前

123 さんが書きました:現に{0}で初期化した整数自動配列と初期化しない整数自動配列の要素をprintf()で表示して見たら、
皆0です。
本当ですか?
確認したプログラムとコンパイラのバージョンを示してください。

なお、私のところでは次のようになりました。

コード: 全て選択

#include <iostream>
 
int main()
{
	int a[10];
	for (int i = 0; i < 10; i++)
		std::cout << a[i] << std::endl;
}
VisualStudio 2013 の VC++ による実行結果

コード: 全て選択

18053716
10157376
17895567
0
10157396
17949280
17928688
17928688
0
10157412
cygwin の g++ 5.4.0 による実行結果

コード: 全て選択

164912
6
0
0
-13120
0
-13215
0
0
0

梅衣堂ひよ
記事: 24
登録日時: 1年前

Re: 自動変数の初期化方法

#5

投稿記事 by 梅衣堂ひよ » 1年前

たしかグローバル変数とローカル変数で初期値が違います。
グローバル変数で試してたりしません?
結構説明が下手ですのでご了承ください。割と言葉が足りなかったり文字だらけで分かりにくかったりします。

123

Re: 自動変数の初期化方法

#6

投稿記事 by 123 » 1年前

お返答ありがとうございます。
私の実験コードと 梅衣堂ひよさんのと同じですよ。
梅衣堂ひよさんの実験では全要素0にならなくて、良かったのです。
これで、下記のようにして、
int a[10] ={0};

もし今度が全要素0になれば、{0}での初期化の有効性が確かめられますね。
私のVisual studio のdebug環境では{0}を入れなくても、全員0だったんです。

佐藤

Re: 自動変数の初期化方法

#7

投稿記事 by 佐藤 » 1年前

梅衣堂ひよ 様
有難うございました。
自分が実験をやってみたら、
{0}だと、自動配列要素全員が0で初期化されるのは確認できました。
他の数値だた一番目の要素だけその数値になっています。

123様へ
実験環境が違うのではないでしょうか。

佐藤

Re: 自動変数の初期化方法

#8

投稿記事 by 佐藤 » 1年前

梅衣堂ひよ 様
有難うございました。
自分が実験をやってみたら、
{0}だと、自動配列要素全員が0で初期化されるのは確認できました。
他の数値だた一番目の要素だけその数値になっています。

123様へ
実験環境が違うのではないでしょうか。

返信

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