[C++] ドット.矢印->演算違い

2 min read
hiroweb developer

解説

.(ドット演算子)演算子は、オブジェクトが直接指定された場合に使用される。具体的には、 Person.age は、 Person オブジェクトの age メンバーにアクセスするために使用される。

一方、 ->(矢印演算子) は、オブジェクトがポインタで指定された場合に使用される。具体的には、 Person->age は、 Person ポインタが指すオブジェクトの age メンバーにアクセスするために使用される。矢印演算子は、ポインタの値を解除してから、そのオブジェクトのメンバーにアクセスするための省略表記である。

たとえば、以下のような構造体を定義したとする。

struct Person {
  char name[20];
  int age;
};

この場合、nameage にアクセスするためには、.(ドット演算子)を使う。

struct Person p;
strcpy(p.name, "John");
p.age = 30;

一方、ポインタを使って構造体にアクセスする場合には、ポインタを->(矢印演算子)で参照する。

struct Person *ptr;
ptr = &p;
strcpy(ptr->name, "John");
ptr->age = 30;

このように、C 言語でもドット演算子は構造体のメンバーにアクセスするために使用されるが、ポインタを使う場合には矢印演算子が使用される。