第15回

呼び出し側の2つのint型変数の値を交換する関数

00/06/29 サンプルプログラムのインデントを改善した
98/11/06 IE4.xに対応させた
98/04/29メールアドレス訂正

突然ですが問題です。(^_^;

mainの中で宣言された2つのint型変数aとbがあるとします。これらの2つの変数の値を交換する関数を定義するには、どうしたらいいでしょうか?

と、いうのが今回のテーマです。(^_^;
まずはダメな例からお見せしましょう。

#include<stdio.h>
void intswap(int a,int b){
    int x;
    x=a;
    a=b;
    b=x;
}

main(){
    int a=2,b=3;
    intswap(a,b);
    printf("aは%d\nbは%d\n",a,b);
}
このプログラムを実行しても、
aは2
bは3
といった具合に、mainの中の変数a,bの値は入れ替わりません。
それはなぜでしょう?

理由その1
intswap関数に渡されるのは、あくまでmainの変数a、bの値であって、変数a、bそのものが渡される訳ではない。

理由その2
intswap関数のパラメータの変数a,bは、intswap関数の中だけで有効な変数である。つまりmain側の変数a,bとは全くの別物である。

では、一体どうしたらいいのでしょうか?


答え。
関数に、変数の値ではなく、その変数のアドレスを渡してやればいいのです。
つまり、intswap関数のパラメータである変数a、bが、それぞれmain側の変数a、bのアドレスを指し示すようにすればいいのです。以下のようになります。
#include<stdio.h>
void intswap(int *a,int *b){
    int x;
    x=*a;
    *a=*b;
    *b=x;
}

main(){
    int a=2,b=3;
    intswap(&a,&b); /*   アドレスを渡す    */
    printf("aは%d\nbは%d\n",a,b);
}
これで、実行結果は、
aは3
bは2
となるわけです。

つづく。


[メニュー][第14回][第16回]

いーざ
email:CQP00202@nifty.ne.jp