[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