お世話になっております。
プログラミングの勉強を始めた者です。
下記のIT用語辞典で、静的変数は「グローバル変数のように、他の関数から使用することはできない。」とありますが、理解に苦しんでいます。
http://e-words.jp/w/E382B9E382BFE38386E ... 5A489E695B...
これは関数外で静的変数として宣言した場合のことでしょうか。静的変数はプログラムの実行開始から終了まで存在する変数かと思いますが、関数で使用できないとあまり意味がないかと思います。。
どなたかご説明をお願いします。
またグローバル変数と静的変数の違いも併せて教えて頂けますでしょうか。
静的変数について
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 14年前
- 住所: 東海地方
- 連絡を取る:
Re: 静的変数について
静的変数と動的変数の寿命の違いと見える範囲=スコープの違いは別の問題です。
なので、IT用語辞典の説明は寿命とスコープを混同しているように読めます。
「変数 (プログラミング) - Wikipedia」 こちらの方が説明が的確かと思います。
http://ja.wikipedia.org/wiki/%E5%A4%89% ... F.E5.91.BD
グローバル変数:外部参照可能(グローバル・スコープ)で寿命がプログラム起動中有効なもの。
静的変数:スコープは色々バリエーションがあるが寿命がプログラム起動中有効なもの。C++においてクラスでstaticを使った場合は、インスタンス生成に関係なく静的なメモリを持つ(寿命がプログラム起動中有効)変数となる。
なので、IT用語辞典の説明は寿命とスコープを混同しているように読めます。
「変数 (プログラミング) - Wikipedia」 こちらの方が説明が的確かと思います。
http://ja.wikipedia.org/wiki/%E5%A4%89% ... F.E5.91.BD
グローバル変数:外部参照可能(グローバル・スコープ)で寿命がプログラム起動中有効なもの。
静的変数:スコープは色々バリエーションがあるが寿命がプログラム起動中有効なもの。C++においてクラスでstaticを使った場合は、インスタンス生成に関係なく静的なメモリを持つ(寿命がプログラム起動中有効)変数となる。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: 静的変数について
これは明らかな間違いですね。hashiking さんが書きました:静的変数は「グローバル変数のように、他の関数から使用することはできない。」とありますが、理解に苦しんでいます。
int a; /* プログラム中のどこからでもアクセス可能な「静的変数」 */
static int b; /* 同じ翻訳単位からだけアクセス可能な「静的変数」 */
void f(void)
{
static int c; /* 関数fの中からだけアクセス可能な「静的変数」 */
{
static int d; /* 同じブロックの中からだけアクセス可能な「静的変数」 */
}
}
つまり、静的変数だからといって他の関数からアクセスできないわけではありません。
Re: 静的変数について
早速のご回答ありがとうございます。
IT用語辞典の表現が微妙だっただけですね。
グローバルに宣言された静的変数はどの関数にも利用でき、関数、ブロック内で宣言されるとその単位内でしか
関数が使えないことが分かりました。関数内で利用できるという点が、グローバル変数との違いですね。
関数内静的変数はプログラム終了までを寿命とするため、その点が自動変数と異なる点であることも理解しました。
ありがとうございました。
IT用語辞典の表現が微妙だっただけですね。
グローバルに宣言された静的変数はどの関数にも利用でき、関数、ブロック内で宣言されるとその単位内でしか
関数が使えないことが分かりました。関数内で利用できるという点が、グローバル変数との違いですね。
関数内静的変数はプログラム終了までを寿命とするため、その点が自動変数と異なる点であることも理解しました。
ありがとうございました。