[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[jfriends] Re: ポインタと参照
小薮です。
On Mon, 25 Jan 1999 18:52:32 +0900
in [jfriends] ポインタと参照
Kazuya Maebashi <maebashi@xxxxxxxxxx> wrote:
> 遠藤さん:
> >それは「参照」です。でも C++ の参照とは違います。決してポイ
> >ンターではありません。
>
> ・Cには、「ポインタ」が存在する。「参照」はない。
>
> ・C++には、「参照」と「ポインタ」が存在する。それは別のものである。
>
> ・Javaには、C/C++における「ポインタ」が存在するが、それを
> 「参照」と呼んでいる。
>
> と私は認識してますが...
>
> 私は、「参照」という言葉の厳密な定義を知らないので、その辺は
> ぜひ詳しい方の教えを請いたいです。が、フツーのCプログラマか
> ら見れば、Javaの「参照」って、まぎれもなくポインタに見えます。
そうですね。名前はともかく,ポインタの方に似ている部分も
ありますよね。
> 少なくとも、
>
> 「Javaにはポインタがないから簡単だ」
>
> と言われると、私は拒否反応を示してしまいます。
Javaにポインタがないのは,言語を覚えやすくするため
だけじゃあないと思います。
> (3)Javaには、ポインタ演算はない。
これは非常に重要な事です。
Cではillegalなポインタを簡単に作れてしまいますが,
Javaでは,でたらめなところを指す参照はどうがんばっても
作れません。ソフトウェアの信頼性に大きく寄与する
仕様だと思います。
> (1)と(2)って、どうもGCの実装を簡単にするためにこうしたように
> しか見えないのですが... 実際の所どうなんでしょう?
int a, b, *p;
:
a = 1;
*p = 2;
b = a; ・・・(1)
というコードがあったとき,(1)をb=1;と最適化したい
ところですが,もしpの初期化が
p=&a;
という形で行われていたらそれができません。
・・・という話を聞いた事があります。
つまり,ポインタの自由度の高さは,C/C++の欠点の
一つだということだそうです。
(5)Javaでは*や&などの演算子を使わない
というのもあります。
ノーテーションの問題は小さくないと思いますよ。
実際,C++で参照が導入されているのもswap(a,b)と書きたいという
のが大きな理由だったりしませんでしょうか?
-----------------------------------
koyabu@xxxxxxxxxx