[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