●学校情報

講座一覧・募集状況

学習方法

学習サポート

修了生の評価

受講生の横顔

当学院について

入学相談

入学手続

 

●講座情報

技術者養成講座

プログラミング講座

WEB講座

情報処理試験講座

Excel講座

Access講座

 

●関連コラム

関連コラム

関連用語集

 

logo

 

 

関連用語集

関数に値を渡す2つの方法「値渡し」と「参照渡し」って何?C言語の基本をやさしく解説!

C言語で関数に値を渡す方法には、「値渡し(call by value)」「参照渡し(call by reference)」の2種類があります。
処理結果や変数の変更に違いが出る重要な考え方なので、しっかり理解しておきましょう。

値渡し(call by value)とは?

値渡しでは、変数の「中身の値」だけをコピーして関数に渡すため、
関数内で値を変更しても、元の変数には影響しません

void change(int n) {
    n = 100;  // 元の変数には影響しない
}

int main(void) {
    int a = 10;
    change(a);
    printf("%d\n", a);  // 出力:10(変化なし)
    return 0;
}
    

参照渡し(call by reference)とは?

参照渡しでは、変数の「アドレス(場所)」を渡すことで、関数内から元の変数そのものを変更できます。
C言語では、ポインタを使うことで参照渡しを実現します。

void change(int *n) {
    *n = 100;  // 元の変数の値を変更する
}

int main(void) {
    int a = 10;
    change(&a);  // 変数aのアドレスを渡す
    printf("%d\n", a);  // 出力:100(変更された)
    return 0;
}
    

値渡しと参照渡しの違い

項目 値渡し 参照渡し
渡すもの 変数の値(コピー) 変数のアドレス
元の変数への影響 影響なし 変更される可能性あり
使用する記号 なし *(ポインタ)、&(アドレス演算子)

どちらを使えばいいの?

  • 値をそのまま使って「結果を返さない」なら → 値渡し
  • 関数内で値を「書き換えたい」なら → 参照渡し(ポインタ)

まとめ

C言語では、関数に渡す値がコピーされる「値渡し」が基本です。
しかし、ポインタを使えば「参照渡し」のように元の変数を変更することも可能です。
初心者の方は、&(アドレス)と*(ポインタの中身)をセットで理解しながら、実際に使ってみるのがおすすめです!