底辺過ぎてちょっとビビる

26歳からIT業界にいるエンジニアが、まったく成長できてないことを確認するブログ。備忘録的に使いたいとも考えています。

【C言語】未だにstaticの使い方がよくわからない その2

 

以前、未だにstaticの使い方がよくわからない

という記事を書いたのですが、とにかくstatic変数というのははじめに初期化したあとは確保された値が開放されないのだ と学びました。

 

 

具体的なプログラムを改めて書いてみます。

 

#include <stdio.h>

int f_num = 0;

void func(int num){
   
    int i_num = 0;
    static int s_num = 0;
   
    f_num++;
    i_num++;
    s_num++;
    printf("外部変数f_num=%d, 内部変数i_num=%d, スタティック変数s_num=%d\n", f_num, i_num, s_num);
}

int main(void)
{
    int n;
    for(n = 0;n < 8;n++){
        func(n);
    }
    return 0;
}

 

で、実行結果がこれ

f:id:starscream1999:20130623203058p:plain

 

関数内で宣言したi_numは処理から抜けるごとに、0で再初期化されてインクリメントされてもまた0に戻るため、表示は1のまま。

そして、static宣言されたs_numは最初に0で初期化されたあとは、処理にはいっても再初期化されずに、インクリメントされた値を保持し続けている。

 

※外部変数とstatic変数は初期化処理をせずとも上記と同じ結果になる。

それは、「初期化子が指定されていない静的記憶域期間をもつオブジェクトは、0で初期化される」から。

なるほど・・・。

 

 

 

Cの絵本―C言語が好きになる9つの扉

Cの絵本―C言語が好きになる9つの扉