メイン関数とプログラマー定義の関数で同じメモリーにアクセスできれば、問題は解決す る。いろいろな方法があるが、ここでは後に示すプログラムで、参照渡しという技法を使 う。これにより、メモリーの状態が図2のようになる。プロ グラマー定義の関数とメイン関数が同じメモリーを使っているのである。そのため、プロ グラマー定義の関数で、メイン関数の変数の内容を書き換えることができるのである。
参照渡しを実現するためには、呼び出しもとの実引数に&をつけ、呼ばれる関数の 仮引数に*をつける。使い方については、プログラムを見て欲しい。
#include <stdio.h>
void swap(int *i, int *j);
/*==============================================================*/
/* main function */
/*==============================================================*/
int main(void){
int a, b;
char temp;
printf("a = ");
scanf("%d%c",&a, &temp);
printf("b = ");
scanf("%d%c",&b, &temp);
swap(&a, &b); /* 関数呼び出し */
printf("a=%d b=%d\n", a, b);
return 0;
}
/*==============================================================*/
/* データの入れ替え */
/*==============================================================*/
void swap(int *i, int *j){
int temp;
temp = *i;
*i = *j;
*j = temp;
}