スポンサードリンク

記憶クラス指定しには幾つか有りますが、今回は【 static 】と言う記憶クラス指定子を使ったサンプルで勉強してみたいと思います。
※その他の記憶クラス指定子に付いてはまた後日機会が有れば勉強してみたいと思います。

通常の変数(ローカル変数とします)は(例: int a;)関数の処理が終わると破棄されます(メモリには残りません)。
一方グローバル変数はプログラム実行中であっても、常に存在するので値を保つことは可能ですが、他の関数内で同じ変数名を使う事が出来なくなります。(※ローカル変数の場合は同じ変数名を使うことは可能です)
【 static 】記憶クラス指定子を使うことにより、ローカル変数でありながら関数処理が終了しても値が破棄されず、関数処理が終了しても値を保たせる事が可能になります。
例:【 static int b; 】これらは静的変数と呼ばれます。通常の変数 例:【 int b; 】自動変数
サンプル
※戻り値無しの関数【 void maxa(int i) 】と【 void maxb(int j) 】はそれぞれ最大値を出力するようにしている関数です。
#include <stdio.h>
void maxa(int i);
void maxb(int j);
int main(void)
{
maxa(3);
maxa(10);
maxa(1);
maxb(3);
maxb(10);
maxb(1);
return 0;
}
void maxa(int i)
{
int max=0;
if(i > max) max=i;
printf("maxaの最大値=%d\n",max);
}
void maxb(int j)
{
static int max=0;
if(j > max) max=j;
printf("maxbの最大値=%d\n",max);
}
それぞれ値の異なる数で【 maxa 】及び【 maxb 】(staticを使った関数)関数を呼び出し値の大きいものをそれぞれ出力するようにしています。
関数内の記述は、【 main 】関数からそれぞれ【 maxa(3) 】【 maxa(10) 】【 maxa(1) 】と三回呼び出すようにして、それぞれ値の大きい物を判定【 if(i > max)max=i 】記述にて、変数名【 max 】にそれぞれ代入し、それぞれ出力するようになっております。
※【 maxb 】関数についても同じです。

上記の実行結果です。
【 maxa 】と【 maxb 】の出力結果が異なるのは
【 maxa 】関数は、関数処理毎に、変数【 max 】が0に初期化される為。

説明は以上です。
あかかげまるのC言語入門はこちら!!
スポンサードリンクパソコン勉強部屋 | パソコン勉強部屋2 | ADSL勉強部屋 | メール勉強部屋 | LAN勉強部屋 | ホームページ勉強部屋 | 自宅サーバー勉強部屋 | お役立ちソフトの部屋 | C言語勉強 | 無料ゲーム | 無料セキュリティー | Linuxのコーナー | あかかげまる | オンライン通販 | ショップブランドパソコン | DVDとCD編集ツール |
▲ページトップへ