<STEP1>
実引数と仮引数
int main(){
int a = 2;
int b = 156;
change(a,b);
printf("aは%d、bは%d", a, b);
}
void change(int x, int y){
int tmp;
tmp = x;
x = y;
y = tmp;
return;
}
関数を扱う上で、引数を渡す場合、「値渡し」といってメインから関数側へ値がコピーされる形になります。
コピーされた別の変数として扱うため、別の変数を操作しても、元の変数には何ら影響がありません。
しかも、通常は、別のブロック要素からは、変数にはアクセスできません。
別のブロック要素から、変数にアクセスするためには、どのようにすればいいでしょうか…?
<STEP2>
「アドレス渡し」
変数には、アドレスがありました。
変数のアドレスを格納してあるポインタの値を、直接引数として渡してしまえば、実引数のa,bの値に関数側からアクセスして交換することができます。
#include <stdio.h>
void change(int *,int *);
int main(){
int a = 2;
int b = 156;
change(&a,&b);
printf("aは%d、bは%d", a, b);
}
void change(int *x,int *y){
int tmp;
tmp = *x;
*x = *y;
*y = tmp;
return;
}
演習
int a = 2;
int b = 156;
の部分を以下のように変更した上で、関数にアドレス渡しをし、関数上で値の交換を行なってください。
char a = 's';
char b = 't';