自動変数の初期化方法

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

トピックに返信する


答えを正確にご入力ください。答えられるかどうかでスパムボットか否かを判定します。

BBCode: ON
[img]: ON
[flash]: OFF
[url]: ON
スマイリー: OFF

トピックのレビュー
   

展開ビュー トピックのレビュー: 自動変数の初期化方法

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

#8

by 佐藤 » 7年前

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

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

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

#7

by 佐藤 » 7年前

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

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

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

#6

by 123 » 7年前

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

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

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

#5

by 梅衣堂ひよ » 7年前

たしかグローバル変数とローカル変数で初期値が違います。
グローバル変数で試してたりしません?

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

#4

by かずま » 7年前

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

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

#3

by 123 » 7年前

横からすみません

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

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

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

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

#2

by 梅衣堂ひよ » 7年前

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

多分0以外で同じ値をまとめていれたい場合は、for文(もしくはfor each)で代入するかmemsetでメモリの先頭アドレスとサイズを渡して一括で上書きするくらいしかなかったはずです。

自動変数の初期化方法

#1

by 佐藤 » 7年前

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

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

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

forを使うしかないか?

ページトップ