• ベストアンサー

Static変数の必然性について

 今晩は、Cの初心者です、宜しくお願いします。    Global変数とStatic変数の違いがよく分かりせん。  本を読むと、Global変数は「常に同じメモリ上に置かれどの関数からも使用できる」、Static変数は「常に同じ メモリ上に置かれ定義された関数からのみ使用できる」とかいています。  Global変数がどのようなもので、その必要性みたいなものは理解出来るのですが、Static変数については、 Global変数との違い、その必要性、実際にどのような場合に使うのかその必然性みたいものがあるのか理解できません。  いくら本を読んでも、理解出来ないのですが、宜しくご教示願います。

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

  • ベストアンサー
回答No.2

参考リンクより引用 「Cで扱うメモリ領域は一般に、プログラム領域、静的領域、  スタック領域、ヒープ領域の 4つに大別されます。」 まず明かな違いとしてグローバル変数はスタック領域、static変数は静的領域に確保されますのでメモリの位置が異なります。 実用上の問題としては全ての変数をグローバルで扱うならstatic変数はいりませんが、一般的にグローバル変数は多用厳禁とされています。 なのでローカルに置いた方が分かりやすく、かつ変数の値を残したい場合に必要になってきます。 実際は構造体を組む時なんかに便利な機能です。 2人協力プレーの出来るゲームで魔力ゲージを共有するような場合、こんな感じで組めます。 struct Character{ int HP; //体力 static int MP; //魔力、全キャラで共有 int Attack; //攻撃力 int Guard; //防御力 int Score; //得点 //必要に応じて変数を追加していく }; void main(){ Chaacter a,b; //自機はaとbの2体 //以下略 }

参考URL:
http://www9.plala.or.jp/sgwr-t/c/sec12.html

その他の回答 (2)

  • php504
  • ベストアンサー率42% (926/2160)
回答No.3

関数内でしか使わない変数は関数内で宣言しましょうということです いいかえれば1個の関数でしか使わない変数をグローバル変数にしない

htgotk_001
質問者

お礼

みなさん、回答有り難うございました。 もう少し自分でも勉強してみます。

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

Global(=大域的)というのは有効範囲や結合の話であり、Static(=静的)というのは記憶域期間の話です。 まったく別の概念ですので、行動してはいけません。 それぞれを一言で説明するのは難しいので、自分で検索してみてください。 検索に必要なキーワードは上記説明に盛り込んでいます。