[C言語]構造体を関数に参照渡しする

構造体を参照渡しすると、破壊的操作が行えます。

PHPやJavaScriptではオブジェクトを渡すと勝手に参照渡しになるので、LL言語プログラマには割となじみのある処理ですね。
C言語の場合は明示的にアドレスを渡してやる必要があるみたいです。
#include <stdio.h>

struct POINT {
    int x;
    int y;
};

void func(struct POINT *);
main()
{
    struct POINT a = {10,20};
    printf("a = {%d, %d}\n", a.x, a.y);
    
    //aのアドレスを渡すことで、参照渡しができる。
    func(&a);

    printf("a = {%d, %d}\n", a.x, a.y);
}

void func(struct POINT *lp)
{
    //lpはaの実体を指しているので、
    //変数aに対して破壊的に作用する 

    lp->x = 22;
    lp->y = 33;
    
    printf("lp = {%d, %d}\n", lp->x, lp->y);
}
実行結果
 a = {10, 20}
lp = {22, 33}
 a = {22, 33}
カテゴリ:

人気記事