ページ 11

静的変数について

Posted: 2012年2月21日(火) 11:54
by hashiking
お世話になっております。

プログラミングの勉強を始めた者です。

下記のIT用語辞典で、静的変数は「グローバル変数のように、他の関数から使用することはできない。」とありますが、理解に苦しんでいます。

http://e-words.jp/w/E382B9E382BFE38386E ... 5A489E695B...

これは関数外で静的変数として宣言した場合のことでしょうか。静的変数はプログラムの実行開始から終了まで存在する変数かと思いますが、関数で使用できないとあまり意味がないかと思います。。

どなたかご説明をお願いします。

またグローバル変数と静的変数の違いも併せて教えて頂けますでしょうか。

Re: 静的変数について

Posted: 2012年2月21日(火) 12:06
by softya(ソフト屋)
静的変数と動的変数の寿命の違いと見える範囲=スコープの違いは別の問題です。
なので、IT用語辞典の説明は寿命とスコープを混同しているように読めます。

「変数 (プログラミング) - Wikipedia」 こちらの方が説明が的確かと思います。
http://ja.wikipedia.org/wiki/%E5%A4%89% ... F.E5.91.BD

グローバル変数:外部参照可能(グローバル・スコープ)で寿命がプログラム起動中有効なもの。
静的変数:スコープは色々バリエーションがあるが寿命がプログラム起動中有効なもの。C++においてクラスでstaticを使った場合は、インスタンス生成に関係なく静的なメモリを持つ(寿命がプログラム起動中有効)変数となる。

Re: 静的変数について

Posted: 2012年2月21日(火) 15:12
by たかぎ
hashiking さんが書きました:静的変数は「グローバル変数のように、他の関数から使用することはできない。」とありますが、理解に苦しんでいます。
これは明らかな間違いですね。

コード:

int a;  /* プログラム中のどこからでもアクセス可能な「静的変数」 */
static int b;  /* 同じ翻訳単位からだけアクセス可能な「静的変数」 */
void f(void)
{
    static int c;  /* 関数fの中からだけアクセス可能な「静的変数」 */
    {
        static int d;  /* 同じブロックの中からだけアクセス可能な「静的変数」 */
    }
}
上のようになります。
つまり、静的変数だからといって他の関数からアクセスできないわけではありません。

Re: 静的変数について

Posted: 2012年2月21日(火) 16:59
by hashiking
早速のご回答ありがとうございます。

IT用語辞典の表現が微妙だっただけですね。

グローバルに宣言された静的変数はどの関数にも利用でき、関数、ブロック内で宣言されるとその単位内でしか

関数が使えないことが分かりました。関数内で利用できるという点が、グローバル変数との違いですね。

関数内静的変数はプログラム終了までを寿命とするため、その点が自動変数と異なる点であることも理解しました。

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