Rainbow Engine

IT技術を分かりやすく簡潔にまとめることによる学習の効率化、また日常の気付きを記録に残すことを目指します。

C++

C++の「->」(アロー演算子)とは?意味や使い方をご紹介

投稿日:2021年9月8日 更新日:

 

<目次>

(1) C++の「->」(アロー演算子)とは?意味や使い方をご紹介
 (1-1) C++の「->」(アロー演算子=arrow operator)とは?
 (1-2) 構文
 (1-3) サンプルプログラム

(1) C++の「->」(アロー演算子)とは?意味や使い方をご紹介

(1-1) C++の「->」(アロー演算子=arrow operator)とは?

アロー演算子(「->」)は構造体共用体の要素にアクセスするために使います。その際に、構造体や共用体を指す「ポインタ」の変数とともに使われます。

●ドット演算子との違いは?

ドット「.」は構造体(structure)や共用体(union)のメンバ(変数や関数)にアクセスするために使用します。一方でアロー演算子「->」は「ポインタ」から構造体や共用体にアクセスする際に使われます。
 
ポインタ自体は変数の「アドレス」を保持しているものですが、アロー演算子を使う事によりポインタ経由でもオブジェクトのメンバ(変数や関数)にアクセスできます。
 

(1-2) 構文

●①メンバ変数へのアクセス

(構文)
ポインタ名->変数名
 
(例)p2は構造体変数へのポインタ、bはその構造体のメンバ変数とします。
p2->b
 

●②メンバ変数の更新

(構文)
ポインタ名->変数名=XXXX
 
(例)p2は構造体変数へのポインタ、bはその構造体のメンバ変数とします。
p2->b=10.5
 

(1-3) サンプルプログラム

●①メンバ変数へのアクセス

■■■の行が今回のポイントです。構造体変数p1のメンバaに65を代入すると、p1のポインタであるp2からaにアクセスしても、同じく「65」を取得できています。
 
(サンプル)
#include <iostream>
#include <string>
using namespace std;

int main()
{
    //# 構造体体の定義
    struct sample {

        //# 初期化方法①
        //# C++では構造体定義の中で初期化可能
        int a;
        char b;
    };

    //# 構造体の変数
    struct sample p1;

    //# 構造体の変数を指すポインタ
    struct sample* p2;
    //# ポインタを初期化
    p2 = &p1;

    //# 構造体変数のメンバに値を代入
    p1.a = 65;

    //# p1は通常の変数なので「ドット演算子」でメンバにアクセス
    //# ■■■ p2はポインタなので「アロー演算子」でメンバにアクセス ■■■
    cout << "================" << endl;
    cout << "p1.a= " << p1.a << endl;
    cout << "p2.a= " << p2->b << endl;

}
 
(図131)実行結果

●②メンバ変数の更新

■■■の行が今回のポイントです。
 
(サンプル)
 
#include <iostream>
#include <string>
using namespace std;

int main()
{
    //# 構造体体の定義
    struct sample {

        //# 初期化方法①
        //# C++では構造体定義の中で初期化可能
        int a;
        char b;
    };

    //# 構造体の変数
    struct sample p1;

    //# 構造体の変数を指すポインタ
    struct sample* p2;
    //# ポインタを初期化
    p2 = &p1;

    //# 構造体変数のメンバに値を代入(変数経由)
    p1.a = 65;

    //# ■■■ 構造体変数のメンバに値を代入(ポインタ経由) ■■■
    p2->a = 80;

    //# p1は通常の変数なので「ドット演算子」でメンバにアクセス
    //# p2はポインタなので「アロー演算子」でメンバにアクセス
    cout << "================" << endl;
    cout << "p1.a= " << p1.a << endl;
    cout << "p2.a= " << p2->a << endl;

}
 
(図132)実行結果
 

Adsense審査用広告コード


Adsense審査用広告コード


-C++

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

GDBの使い方をC++のプログラムのデバッグを例にご紹介

  <目次> (1) GDBの使い方をC++のプログラムのデバッグを例にご紹介  (1-1) GDBのデバッグのシナリオ概要(例)  (1-2) GDBのデバッグ手順(例)  (1-3) そ …

C++をLinuxでコンパイルする方法について

  <目次> (1) C++をLinuxでコンパイルする方法について  (1-1) STEP0:【事前準備】ターミナル機能の準備(ターミナル、Teraterm、Putty)  (1-2) S …

C++で「静的でないメンバー参照は特定のオブジェクトを基準とする相対参照である必要があります」エラーが出た時の対処

  <目次> (1) C++で「静的でないメンバー参照は特定のオブジェクトを基準とする相対参照である必要があります」エラーが出た時の対処  (1-1) エラーメッセージ  (1-2) 原因 …

ValgrindのStill Reachableの意味や実際のサンプルをご紹介

  <目次> (1) ValgrindのStill Reachableの意味や実際のサンプルをご紹介  (1-1) Valgrindの「Still Reachable」はどんな状況?  (1 …

C++のfork関数の構文や使い方について

  <目次> (1) C++のfork関数の構文や使い方について  (1-1) fork()関数とは?概要や目的  (1-2) fork()関数の構文  (1-3) fork()関数のサンプ …

  • English (United States)
  • 日本語
Top