こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

-広告-

解決済みの質問

静的動的とは?

静的とはあらかじめ決められ変わらないもの
動的とは状況に応じて変わるものとあるのですが

以下の文のstaticの部分を見る限りcount変数は変化してるので動的と違うの?と混乱してるのですが
なぜこのcount変数は静的なのか説明をお願いします

int main(void) {
count();
count();
return 0;
}

int count(void) {
static int count;
count++;
printf("%d\n", count);
return 0;
}

よろしくお願いします

投稿日時 - 2018-02-14 12:41:43

QNo.9428959

困ってます

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

静的や動的としている”対象”がなんであるかを理解すると すんなりいきますよ。

この例だと、static宣言で静的としているのは、count変数の「中身」の話ではなく
count 変数の「置き場所や入れ物の大きさ」のことです。
ですので、static宣言したcount変数の置き場所は動かない静的なものではありますが
その変数の中見は、変更できることになります。
(中身を変更できないように固定化したいときに使うのは、staticでなくconstです)

このように関数内で変数を、static (静的=動かせないもの) としていると、
関数が終わっても その変数が確保されたままになるので
例えば++でインクリメントすれば、関数が呼ばれるたびに、1,2,...と増えて行くことになります。
つまり、関数内の変数を 1回ごとに使い捨てにするのではなく、
前回の値を確保したままにしたいときに、static宣言を使います。

投稿日時 - 2018-02-14 15:37:51

お礼

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

投稿日時 - 2018-02-14 19:25:43

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

-広告-
-広告-

回答(2)

ANo.1

「count変数は変化してる」というときの変化しているのは変数の値です。変数の使用しているメモリ領域は変化しませんし,その関数から抜けたあともメモリ領域は開放されず保持されています。そういう意味で静的なのです。

投稿日時 - 2018-02-14 14:50:15

お礼

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

投稿日時 - 2018-02-14 19:25:55

-広告-
-広告-

あなたにオススメの質問

-広告-
-広告-