ポインタと関数

目次

ポインタの関数への活用

ポインタの関数への活用方法を紹介します、。

今回は、2つの整数型の変数を渡すとその値を交換するMySwap()関数を定義してみましょう。

void MySwap(int x, int y)
{
    int buf = x;
    x = y;
    y = buf;
}

関数は2つ以上の値を返すことができないので代入するのではなく変の数値を変更することとします。
xにyを代入してしまうと、元々のxの値は消えてしまうのでbufに一時的に保存します。

これを呼び出してみましょう。

int main(void)
{
    int a = 3;
    int b = 4;

    printf("a = %d, b = %d", a, b);
    
    MySwap(a, b);

    printf("a = %d, b = %d", a, b);
    return 0;
}

しかし、これを呼び出してみても値は変わりません。
それはなぜでしょうか。

答えは関数へのデータの渡し方にあります。

MySwap()関数にaとbという2つの変数を渡しました。
しかし、関数内で変更を加えているのはaとbではありません。
aとbの値をコピーしたxとyという別の変数を変更しているのです。
そのためコピー元のaとbに変化はありません。
このようなデータの渡し方を値渡しといいます。

ポインタでこれを解決できます。

変数や配列はコンピュータのメモリ上に保存されます。
そのとき保存したメモリ上の位置を示す符号をアドレスといいます。
ポインタとはある変数のアドレスを持つ変数のことです。

それではMySwap()関数を変更してみましょう。

void MySwap(int *x, int *y)
{
    int buf = *x;
    *x = *y;
    *y = buf;
}

呼び出すときは

    MySwap(&a, &b);

とします。



コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です