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とは全くの別物である。
では、一体どうしたらいいのでしょうか?
#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となるわけです。
つづく。