引数の値渡し

C言語では,関数の引数は,値渡し(変数の内容がコピーして渡される)です.
従って関数の中で変数を書き換えても呼び出した変数とは関係ないので,呼び出し側の変数の値は変わりません.
(昔の Fortranなどは,参照渡し)

#include <stdio.h>

void func(int i, int j)
{
    i = i + j;
    return;
}


main()
{
    int i, j;

    i = 2;
    j = 5;
    func(i, j);
    printf("i = %d, j = %d\n", i, j);
}


関数の中で引数を書き換えには,変数のアドレスを渡します.

#include <stdio.h>

void func(int* i, int* j)
{
    *i = *i + *j;
    return;
}


main()
{
    int i, j;

    i = 2;
    j = 5;
    func(&i, &j);
    printf("i = %d, j = %d\n", i, j);
}


つぎの例は間違いです,何が間違いなのでしょう?

#include <stdio.h>

void func(int* i)
{
    *i = *i * 2;
    return;
}


main()
{
    int*  p;
    int** x;

    x   = &p;
    **x = 100;
    func(*x);
    printf("**x = %d\n", **x);
}
Last modified: Wednesday, 10 June 2015, 12:21 PM