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++で発生した「 _CrtIsValidHeapPointer(block)」と「is_block_type_valid(header->_block_use)」エラーについて

  <目次> (1) C++で発生した「 _CrtIsValidHeapPointer(block)」と「is_block_type_valid(header->_block_use) …

C++のポインタとは?概念や基本的な使い方をご紹介

  <目次> (1) C++のポインタとは?概念や基本的な使い方をご紹介  (1-1) はじめに  (1-2) ポインタとは? (1) C++のポインタとは?概念や基本的な使い方をご紹介 「 …

C++の動的メモリ割当と静的メモリ割当の違いについて

  <目次> (1) C++の動的メモリ割当と静的メモリ割当の違いについて  (1-1) 静的メモリ割当てとは?  (1-2) 動的メモリとは?  (1-3) 動的メモリの割当て  (1-4 …

Valgrindで行番号を表示させる方法

  <目次> (1) Valgrindで行番号を表示させる方法  (1-1) 行番号を表示させる方法  (1-2) (参考)「-g」オプションについて (1) Valgrindで行番号を表示 …

C++のtime関数とlocaltime関数の違いについて

  <目次> (1) C++のtime関数とlocaltime関数の違いについて  (1-1) C++のlocaltime関数の概要とサンプル  (1-2) C++のtime関数の概要とサン …

  • English (United States)
  • 日本語
Top