[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[jfriends] Re: ポインターと参照




> 「一度初期化したら、再設定しない限り、ずっと同じ領域を指し続けます」
>ですよね。

void func(Foo* p)
{
  p->method(); // なんか処理
  // .. あれこれ
  p = new Foo(); // 別のものを指す (良いコードではありませんが..)
  p->method(); // 別のものについての処理
}

ポインターは別のものも指せるワイルドな奴ですが、

void func(Foo& r)
{
  r.method();
  // .. あれこれ
  r = new Foo(); // これはやっても良かったでしたっけ?
  r.method();
}

やってもいいなら確かに同じだなあ...

>  また、以下の (1), (2) のコードブロックは全く同じコードが生成される
>ことから、ポインタ変数も参照(変数)も同じものであることが分かります。
>    struct Foo {
>      int x;
>    };
>    Foo a;
>    a.x = 2;
>    // (1)
>    Foo& r1 = a;
>    int b1 = r1.x;
>    // (2)
>    Foo* r2 = &a;
>    int b2 = r2->x;

そうなのですね。知りませんでした。

でも表記上の意味論としては区別しておいた方が良いと思うので
「違う」と主張しました。

>>> >Java の参照と C++ の参照は違うらしい。 -> どう違うのか?
>> 本当は Java でもポインターと呼びたいところですが、
>> C/C++ のポインターとは違うので参照と呼んでいます。
>> でも C++ の参照とも違うので困っちゃうわけです。^^;
>  あれ? Javaの参照(変数)は、ポインタ値そのものではないですか?

でもポインター演算できないです。
その生涯を通じて同じ物を指すことが「ある程度」保証されています。
------------------------------------------------------------------
遠藤靖之 (えんどう やすゆき) <yasuyuki@xxxxxxxxxx>
http://www.freepage.total.co.jp/jfriends/ (Java互助会ホームページ)
株式会社タイムインターメディア 情報通信サービス部 TEL 03-5362-9009
〒162-0065 新宿区住吉町3-11 新宿スパイアビル      FAX 03-5362-9008