Cprogramming-c-function-call-by-reference

提供:Dev Guides
移動先:案内検索

Cの参照による関数呼び出し

引数を関数に渡す*参照による呼び出し*メソッドは、引数のアドレスを仮パラメーターにコピーします。 関数内では、呼び出しで使用される実際の引数にアクセスするためにアドレスが使用されます。 これは、パラメーターに加えられた変更が、渡された引数に影響することを意味します。

参照によって値を渡すために、引数ポインターは他の値と同様に関数に渡されます。 そのため、次の関数* swap()*のように、引数によって関数パラメーターをポインター型として宣言する必要があります。この関数は、引数によってポイントされる2つの整数変数の値を交換します。

/*function definition to swap the values*/
void swap(int *x, int *y) {

   int temp;
   temp = *x;   /*save the value at address x*/
   *x = *y;     /*put y into x*/
   *y = temp;   /*put temp into y*/

   return;
}

次の例のように、参照によって値を渡すことにより、関数* swap()*を呼び出しましょう-

#include <stdio.h>

/*function declaration*/
void swap(int *x, int *y);

int main () {

  /*local variable definition*/
   int a = 100;
   int b = 200;

   printf("Before swap, value of a : %d\n", a );
   printf("Before swap, value of b : %d\n", b );

  /*calling a function to swap the values.
     * &a indicates pointer to a ie. address of variable a and
 *&b indicates pointer to b ie. address of variable b.
  */
   swap(&a, &b);

   printf("After swap, value of a : %d\n", a );
   printf("After swap, value of b : %d\n", b );

   return 0;
}

上記のコードを単一のCファイルに入れ、コンパイルして実行し、次の結果を生成しましょう-

Before swap, value of a :100
Before swap, value of b :200
After swap, value of a :200
After swap, value of b :100

変更が関数の外に反映されない値による呼び出しとは異なり、変更は関数の外にも反映されていることを示しています。