C言語で簡単なプログラムを作ります。

プロフィール

編集者NT

Author:編集者NT
編集者NTといいます。プログラミングなどのブログ、メールマガジンを書いています。

よろしくお願いします。

最新コメント

0 コメント

第30回 関数11

第30回 関数11

 今回は、関数で使うstatic変数のについて説明していきます。
では、ソースコードを見てください。

<ソースコード>

#include <stdio.h>

int main2( int a );

void main()
{
  int a=5;
  int d;

  d = main2( 10 );

  /* 関数の値を表示します */
  printf( "1)aは %d で、dは %d です\n", a, d );

  d = main2( a );

  /* 関数の値を表示します */
  printf( "2)aは %d で、dは %d です\n", a, d );

}

int main2( int b )
{
  static int a = 0;

  a = a + b;

  /* 変数 の値を表示します */
  printf( " main2()関数の変数 aは %d で、bは %d です\n", a, b );

  a = b * 20;
  return a;
}


早速、コンパイルして実行してみましょう。
結果は、

main2()関数の変数 aは 10 で、bは 10 です
1)aは 5 で、dは 200 です
main2()関数の変数 aは 205 で、bは 5 です
2)aは 5 で、dは 100 です

が表示されたはずです。

今回のプログラムの、main2()関数の2行目にでてくる変数 aを注目しましょう。
<ソースコード>内では、
static int a = 0 と定義されています。
さて、いままで見てきた関数で使う変数は、一度関数に入り、処理を終え、
その関数から呼び出し元に戻ると、再び、その関数を呼び出すと関数内にある
変数の値は初期値でしたね。過去に呼び出し、その変数に代入した値は、
ありません。前回のプログラムでわかったはずです。
ところが今回の変数 aの値をみると1度main2()関数を終了してmain()関数に戻
る直前の値は200でした。再び、main2()関数を呼び出すと、今までのプログラム
だと、変数 aの値は0になるはずですが、200が変数内にそのまま残っている為、
その後、a = a + b が実行され、変数 aの値は200+5で205になります。
先ほどいったstatic が変数を1つの記憶領域として定義する為、値は、関数を
終了後も値を保持します。

まとめ

 ・ static 変数は1つの記憶領域として定義する。

それでは、次回をお楽しみに
スポンサーサイト



コメント

非公開コメント