book icon indicating copy to clipboard operation
book copied to clipboard

「参照渡し」の例にC言語以外の例を引き合いに出しませんか?

Open NaoyaFukuma opened this issue 1 year ago • 3 comments

C言語に参照渡しは無かったような気がするのですがいかがでしょうか?

同一のメモリを操作するという、いわゆる参照渡しのセマンティクスとしては一致していますが、 例として挙げられているのは、あくまでポインター変数の値渡しを行っているコードかと思われます。

参照渡し

参照渡しは、関数呼び出し元の変数が関数の処理でも共有されます。もし、関数の処理で引数に値を代入すると、関数呼び出し元の変数も変化します。次のコードはC言語の参照渡しの例です。変数aは関数changeに参照渡しされます。changeは引数に2を代入すると、changeの呼び出し元の変数aの値も2になります。

#include <stdio.h>
void change(int *n) {
    *n = 2;
}
int main() {
    int a = 1;
    change(&a);
    printf("%d", a); //=> 2
}

関連ページ: https://github.com/yytypescript/book/edit/master/docs/reference/functions/pass-by-value.md

NaoyaFukuma avatar Jul 14 '23 05:07 NaoyaFukuma

ご指摘ありがとうございます!

C言語には参照渡しという考え方がない(ポインターの値渡しを参照渡しとするのは厳密ではない)ので、C言語を例に出すのは好ましくなかったですね。

suin avatar Jul 14 '23 09:07 suin

RustやC#のように「参照渡し」が規定されている言語を例に出すほうが良さそうです。

suin avatar Jul 14 '23 09:07 suin