「教えて!ピックアップ」リリース!

教えてください。
プログラミング全くの初心者です。

よく変数の宣言と同時に初期値が設定されたりします。
変数宣言の行と分けて2行目に代入するのと、厳密に何か違いがあったりするのでしょうか?
プログラムの上からの流れの中で、何かどちらにした方が良いとか、どちらかが他から間違って参照されることもあったりするのでしょうか?

A 回答 (5件)

C/C++として……


セマンティックとしては初期化は変数を作るときに値を設定して、代入文は文を実行するたびに値を設定する。
自動変数だと挙動はほとんど一緒だけど、静的変数だと全く違う。

int func1()
{
 static int count=0;
 return count++;
}

int func2()
{
 static int count;
 count=0;
 return count++;
}

func1は呼び出すたびに0,1,2,...と返ってくるけど、func2は毎回0が返る。
    • good
    • 0

処理系・言語などによりけりなので、一概には言えません。


Cの場合、よくある例としては、

・実は、Cでも、main() よりも前に(暗黙のうちに)動く関数があります。
初期化の場合は、そこで値がセットされます(といっても、代入と言うよりも、初期値の塊がデータ領域にコピーされる例が多い)
代入は、main() の実行などに明示されていますから、その段階で動きます。
組み込みソフトなどの場合は、初期化で設定した値がセットされていることを確認して、スタートアップ(main() よりも前に動く関数)まで正常に動いていたとか、判断ができることがあります。

・あと、当たり前と言えば、当たり前ですが、const 属性の変数は、初期化しかできません。

こんなところでしょうか。
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2022/10/03 12:08

変数の宣言と同時に初期値が設定されている場合


ディスク等の外部記憶に機械語として格納されてる時に値も入っている。

変数宣言の行と分けて2行目に代入する場合
機械語として格納されてる時には変数エリアがあるだけで値ははいってない。

初期値は代入形式にして置かないと、リユーザブルなプログラムにはならない。

同じプログラムが別の実行単位で同時に実行された場合、後から動く方は、前に動いたプログラムがセットした値を使う事になる。

これで予期しない不具合が出ます。
    • good
    • 1
この回答へのお礼

ありがとうございます。イメージできました。

お礼日時:2022/10/03 12:06

言語によるはずだけど, 例えば C++ だと


・初期化: 「今の値」に意味はない → 新しい値を構築すればそれでいい
・代入: 「今の値」が意味を持つ → 新しい値にする前に (必要なら) 古い値をてきせつに廃棄処分しなければならない
と完全に区別している. C ではあんまり意味がない区分だけど.

あと, ブロックスコープの静的変数では, 初期化が「最初に通った 1回だけ」生じるのに対し代入は「そこを通るたびに毎回実行される」ので全く違う動作になる (これは C でも C++ でも同じ).
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2022/10/03 12:07

例えば数を数えることを考えると初期値がゼロでないと不味いですよね。

初期値が何かわかってないと数えても意味がありません。それで変数の初期化を行うわけだが、このやり方はプログラミング言語によってまちまち。宣言しただけで初期値が暗黙に0と設定されるのもあるが、宣言だけでは初期値未定となるのもあるし、宣言と初期値設定を同時にできるのもある。勉強がんばってください。
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2022/10/03 12:08

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング