• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:C++におけるポインターと変数の違い)

C++におけるポインターと変数の違い

このQ&Aのポイント
  • C++におけるポインターと変数の違いについて説明します。
  • Javaでは変数自体にアドレスが格納されるのに対し、C++ではポインターを利用してアドレスを共有します。
  • C++の変数自体はポインターではなく、プリミティブ型の場合も含めて独立して扱われます。

質問者が選んだベストアンサー

  • ベストアンサー
  • Gotthold
  • ベストアンサー率47% (396/832)
回答No.1

> String s1 = ""; > String s2 = s1; > これでs1をnewしない限り、変更するとs2も情報が変わるはずです。 (話題の本質とはあまり関係ないですが)JavaのStringはimmutableなのでそもそも変更できないと思います。 > そこで疑問に思ったのですが、C++では上記のようなことをする場合、ポインターを利用すると思っています。 ポインタでもいいですが、参照でもできそうですね。 > (stringはchar[]のtypedefなのでちょっと違うのかもしれませんが…)。 std::stringのことならchar[]のtypedefなどではありませんよ。 > C++では、ポインターではない変数自体は何を意味するのでしょうか? 値そのものが入っているといえばいいでしょうか。Javaのintとかと同じですよ。 > string s3 = ""; > string s4 = s3; s3の値がs4にコピーされます。intなどのプリミティブ型と同じです。 (Javaではプリミティブ型以外は参照型になりますが、C++ではクラスも値型です。) というか、実際に試して見てはどうでしょう。C++の環境はないですか?(勉強しているなら無いと困る気がしますが・・・。)

yone6379
質問者

お礼

値そのものが入っているというのは予想外でした。値がコピーされるということは、そのクラスのもつメンバーすべてをコピーするということですか。Javaを学んだ自分からすると驚きです。 C++環境はあるのですが、実際どう結果を吐くかというより、文法的に、意味的にどういうことかが気になっていたので質問させて頂きました。ですが自分で結果を出してから質問するべきでした。 C++における参照という概念も自分が知らないものでした。C++も面白いですね。 ありがとうございました。

その他の回答 (1)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

「C++ では」という一般化は無理です. Hoge a; Hoge b = a; とした場合, 普通は Java の値型と同じように a と b はこの時点で同じだけどこのあとで a を変更しても b は変わらない とするでしょうが, それなりにクラスを作れば Java の参照型と全く同じように a を変更すると b も変わる ようにもできます. ちなみに Java の String は #1 で言われるように immutable なので, 「s1をnewしない」限り変更することはできません. 実際, String には「自分自身を変更するメソッド」がないので s1.ほげ(ど~たらこ~たら) という形で s1 の中身を変えることができません.

yone6379
質問者

お礼

ありがとうございました。

yone6379
質問者

補足

回答ありがとうございます。 参照型と同じことがしたいとか、stringでJavaと同じことがしたい、というわけではありません。Stringはあくまで例です。 結局、この場合のaは何を意味するのでしょうか?自分の質問の例ではs3です。

関連するQ&A