合計 昨日 今日

自動変数の初期化方法

[このトピックは解決済みです]

フォーラムルール
フォーラムルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
Name: 佐藤
[URL]
Date: 2017年4月12日(水) 21:10
No: 1
(OFFLINE)

 自動変数の初期化方法

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

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

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

forを使うしかないか?

Name: 梅衣堂ひよ
[URL]
入門者(2,544 ポイント)
Date: 2017年4月12日(水) 23:36
No: 2
(ONLINE)

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

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

それC++ですね。(純粋なCはわからないけど、おそらくCから引き継いだ機能です。)
まあ他にもできる言語があるかもですが。
カンマ区切りで指定した部分までは指定した数を代入するけど、指定されなかったやつらは軒並み0にさせられます。

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

Name: 123
[URL]
Date: 2017年4月13日(木) 11:36
No: 3
(OFFLINE)

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

横からすみません

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

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

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

Name: かずま
[URL]
Date: 2017年4月13日(木) 12:37
No: 4
(OFFLINE)

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

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

本当ですか?
確認したプログラムとコンパイラのバージョンを示してください。

なお、私のところでは次のようになりました。
コード[C++]: 全て選択
1
2
3
4
5
6
7
8
#include <iostream>
 
int main()
{
    int a[10];
    for (int i = 0; i < 10; i++)
        std::cout << a[i] << std::endl;
}

VisualStudio 2013 の VC++ による実行結果
コード[Text]: 全て選択
1
2
3
4
5
6
7
8
9
10
18053716
10157376
17895567
0
10157396
17949280
17928688
17928688
0
10157412

cygwin の g++ 5.4.0 による実行結果
コード[Text]: 全て選択
1
2
3
4
5
6
7
8
9
10
164912
6
0
0
-13120
0
-13215
0
0
0

Name: 梅衣堂ひよ
[URL]
入門者(2,544 ポイント)
Date: 2017年4月13日(木) 12:55
No: 5
(ONLINE)

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

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

Name: 123
[URL]
Date: 2017年4月13日(木) 17:28
No: 6
(OFFLINE)

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

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

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

Name: 佐藤
[URL]
Date: 2017年4月15日(土) 18:29
No: 7
(OFFLINE)

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

[解決!]

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

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

Name: 佐藤
[URL]
Date: 2017年4月15日(土) 18:29
No: 8
(OFFLINE)

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

[解決!]

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

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


Return to C言語何でも質問掲示板

オンラインデータ

このフォーラムを閲覧中のユーザー: Dixq (管理人), 梅衣堂ひよ & ゲスト[12人]