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

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

関連記事

C++の「int **g = new int*;」の意味について

  <目次> (1) C++の「int **g = new int*;」の意味について  (1-1) 「int **g = new int*;」の意味  (1-2) サンプルで理解を深める …

Base64とは?概要やアルゴリズムについてご紹介

  <目次> (1) Base64とは?概要やアルゴリズムについてご紹介  (1-1) Base64とは?  (1-2) Base64の仕組み  (1-3) Base64の実装 (1) Ba …

C++の値渡しと参照渡しの使い分けや違いについて

<目次> (1) C++の値渡しと参照渡しの使い分けや違いについて  (1-1) 「値渡し」とは?  (1-2) 「参照渡し」とは?  (1-3) 「値渡し」と「参照渡し」の使い分け (1) C++の …

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

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

パイプ通信とは?概要やサンプルプログラムをご紹介

  <目次> (1) パイプ通信とは?概要やサンプルプログラムをご紹介  (1-1) パイプ通信の概要  (1-2) パイプ通信の構文  (1-3) パイプ通信のサンプルプログラム①(単一プ …

  • English (United States)
  • 日本語
Top