<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';