青山です。

なかなかまとまらず済みません。C++ で間違った記述をするとさらにややこし
くなるので、C でいきます。

On Fri, 5 Nov 1999 22:50:04 +0900,
Wakou Aoyama <wakou / fsinet.or.jp> wrote:

> void foo(int *n) {
>   *n = 1;
> }
> main() {
>   int obj;
>   int *n = &obj;  /* int *n; n = &obj; */
>   *n = 0;
>   foo(n);         /* *n => 1 */
> }
> 
> 参照の値渡し。(C++ での参照を使った書き方はわかりません。というか、書
> けないような気も。)

ちょっと違いますね。やはり参照の参照渡しと言うべきのような。いや、参照
*を*参照渡しですね。

で、参照を値渡し。(値返し)

int foo(int n) {
  n = 1;
  return n;
}
main() {
  int obj;
  int *n = &obj;
  *n = 0;
  *n = foo(*n);
}

値を参照渡し。
 
void foo(int *n) {
  *n = 1;
}
main() {
  int n = 0;
  foo(&n);
}

値を値渡し。(値返し)

int foo(int n) {
  n = 1;
  return n;
}
main() {
  int n = 0;
  n = foo(n);
}

で、Ruby は、参照を参照渡し、参照返し。

int* foo(int *n) {
  *n = 1;
  return n;
}
main() {
  int obj;
  int *n = &obj;
  *n = 0;
  foo(n); /* n = foo(n); などなど */
}

すべての操作がリファレンスベース。


-- 
青山 和光 Wakou Aoyama <wakou / fsinet.or.jp>