【関数】C言語(3)

3417 ワード

関数は、タスクを一緒に実行する一連の文です.各Cプログラムには少なくとも1つの関数、すなわち主関数main()があり、すべての簡単なプログラムは他の追加の関数を定義することができる.
関数の定義
return_type function_name( parameter list )
{
    body of the function
}
  • 戻りタイプ:戻り値のタイプ、戻り値がない場合return_type時キーワードvoid
  • 関数名
  • パラメータ
  • 関数本体
  • 例:
    /*                */
    int max(int num1, int num2) 
    {
       /*        */
       int result;
     
       if (num1 > num2)
          result = num1;
       else
          result = num2;
     
       return result; 
    }

    関数宣言
    return_type function_name(parameter_list);
    int max(int num1, int num2);
    //      ,       
    int max(int, int);

    呼び出し関数
    プログラムが関数を呼び出すと、プログラム制御権は呼び出された関数に移行します.呼び出された関数は定義されたタスクを実行し、関数の戻り文が実行されるか、関数の終了カッコに達すると、プログラム制御権がメインプログラムに返されます.
    #include 
     
    /*      */
    int max(int num1, int num2);
     
    int main ()
    {
       /*        */
       int a = 100;
       int b = 200;
       int ret;
     
       /*            */
       ret = max(a, b);
     
       printf( "Max value is : %d
    ", ret ); return 0; } /* */ int max(int num1, int num2) { /* */ int result; if (num1 > num2) result = num1; else result = num2; return result; }

    output:
    Max value is : 200

    関数パラメータ
    形式パラメータは、関数内の他のローカル変数のように、関数に入ると作成され、関数を終了すると破棄されます.
    1、値呼び出し
    このメソッドでは、パラメータの実際の値を関数パラメータにコピーし、関数内部のパラメータを変更しても実際のパラメータには影響しません.
    #include 
    
    void swap(int, int);
    
    int main()
    {
        int x=2, y=3;
        printf("    x=%d
    ", x); printf(" y=%d
    ", y); /* */ swap(x, y); printf(" x=%d
    ", x); printf(" y=%d
    ", y); return 0; } void swap(int x, int y) { int temp; temp = x; x = y; y = temp; return; }

    output:
        x=2
        y=3
        x=2
        y=3

    主関数のaとbは実際には交換されていないことがわかる.
    2、引用呼び出し
    参照伝達方式により、パラメータは実パラメータアドレスを指すポインタであり、パラメータに対するポインタが操作されると、実パラメータ自体に対する操作に相当する.
    #include 
    
    void swap(int*, int*);
    
    int main()
    {
        int x=2, y=3;
        printf("    x=%d
    ", x); printf(" y=%d
    ", y); swap(&x, &y); printf(" x=%d
    ", x); printf(" y=%d
    ", y); return 0; } void swap(int *x, int *y) { int temp; temp = *x; *x = *y; *y = temp; return; }

    output:
        x=2
        y=3
        x=3
        y=2

    交換成功!
    変数スコープ
    役割ドメインはプログラムで定義された変数が存在する領域であり,その領域変数を超えるとアクセスできない.
    1、局所変数
    関数またはブロックの内部で宣言される変数をローカル変数と呼びます.
    #include 
     
    int main ()
    {
      /*        */
      int a, b;
      int c;
     
      /*       */
      a = 10;
      b = 20;
      c = a + b;
     
      printf ("value of a = %d, b = %d and c = %d
    ", a, b, c); return 0; }

     
    2、グローバル変数
    グローバル変数は、通常、プログラムの上部に定義されます.グローバル変数はプログラムライフサイクル全体で有効であり、任意の関数内部でグローバル変数にアクセスできます.
    #include 
     
    /*        */
    int g;
     
    int main ()
    {
      /*        */
      int a, b;
     
      /*       */
      a = 10;
      b = 20;
      g = a + b;
     
      printf ("value of a = %d, b = %d and g = %d
    ", a, b, g); return 0; }

    ローカル変数とグローバル変数の名前は同じですが、関数内ではローカル変数の値がグローバル変数の値を上書きします.
     
    3、形式パラメータ
    関数のパラメータは、関数内のローカル変数として扱われ、グローバル変数を優先的に上書きします.