C -> アロー演算子

提供:yonewiki
2022年9月26日 (月) 10:55時点におけるYo-net (トーク | 投稿記録)による版 (ページの作成:「C++へ戻る <table class="mbox-small" style="border:1px solid #aaa; background-color:#f9f9f9; width:22em;" id="RealTitleBanner"> <tr> <td style="width:1px;"></td> <td class="mbox-text plainlist" style="">本来の表記は「<b><span id="RealTitle" style="font-size:large;">C -> アロー演算子</span></b>」です。この記事に付けられた題名は{{記事名の制約}}から不正確なものとなっています。…」)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)

C++へ戻る


本来の表記は「C -> アロー演算子」です。この記事に付けられた題名はテンプレート:記事名の制約から不正確なものとなっています。

※このページではC言語にも存在していたという意味で記事タイトルがC -> アロー演算子になっていますが、
C++でも同様です。C++だけの機能がある場合は明記します。

アロー演算子

アロー演算子"->"は、クラスのメンバ変数やメンバ関数、構造体のメンバ変数を記述する際、
クラス変数や、構造体変数のポインタを使って、例えば、pというポインタ変数を使ってnというメンバ変数を指定する場合、

(*p).n;

と記述しますが、アロー演算子を使うことにより

p->n;

と置き換えることが出来ます。アロー演算子を使った表記が流行していますので、もはや、もともとの記述の方がよくわからないという印象もあるのかもしれません。
ポインタ p に対して *p って書くとアドレスの中身を返してくれるものだったことは、忘れちゃいけないよ。
ポインタ変数を宣言するときは (型名 *P) って書くのでした。
ポインタではない、型名で宣言した変数 f に対して、アドレスを取得するときは &f みたいに "&" アドレス演算子をつけるんだ。


pが配列ならカッコが必要になります。p + i (配列番号 i)だとしたら

(*(p + i)).n;
(p + i)->n

カッコがなければメンバ名がiという変数にぶら下がっているとも判断できるので、仕方ないですね。カッコがないとコンパイルエラーになるはずです。


添え字番号に[]を使うと

(p[i]).n;
(&p[i])->n

となるでしょう。


C++へ戻る