#3 C++で学ぶ演算子の基本

C++の演算子は、基本的な計算に加えて、メモリの番地を扱う独特な演算子が存在するのが特徴です。この記事では、C++の基本的な演算子とポインタの考え方について解説します。

算術演算子・比較演算子

C++では、次のような演算子を使います。

  • + - * / % 算術演算子
  • == != > < 比較演算子
  • && || ! 論理演算子

整数の割り算は切り捨てになる

C++でも、整数型同士の割り算は小数点以下が切り捨てられます。小数の結果が欲しい場合は、どちらかの値をdouble型にする必要があります。

std::cout << 10 / 3 << std::endl;       // 3
std::cout << 10.0 / 3 << std::endl;     // 3.33333

ポインタに関連する演算子

C++には、変数がメモリ上のどこに置かれているか(番地)を扱うための、少し特殊な演算子があります。

  • & 変数のアドレスを取得する
  • * アドレスが指す先の値を取得する(掛け算の記号と同じ見た目だが意味が異なる)
int age = 20;
int* p = &age;       // ageのアドレスをpに格納
std::cout << *p << std::endl; // pが指す先の値(20)を表示

この仕組みは「ポインタ」と呼ばれ、C++がコンピュータの内部動作に近いところまで扱えることを示す代表的な特徴です。学び始めのうちは難しく感じても問題ありません。

アロー演算子->

ポインタが指す先がクラスや構造体の場合、メンバーにアクセスするには(*p).nameのように書く必要がありますが、これを短く書ける->という専用の演算子が用意されています。

Person* p = &person;
std::cout << p->name << std::endl; // (*p).name と同じ意味

C++ならではの注意点

*という記号が、掛け算とポインタの2つの意味で使われるのは、C++を学び始めた人が混乱しやすいポイントです。書かれている場所(変数の前か、式の途中か)によって意味が変わることを意識しながら、コードを読む練習をしていきましょう。ポインタが指す先が有効なメモリでない状態でアクセスすると、プログラムが異常終了する危険な操作になるため、使い終わったポインタは適切に扱う意識も大切です。

複合代入演算子

「変数に加算してから代入し直す」処理をまとめて書ける複合代入演算子も、他のC言語系の言語と同様に使えます。

int count = 0;
count += 1; // count = count + 1 と同じ
count *= 2; // count = count * 2 と同じ

まとめ

C++の演算子は基本的な計算に加え、ポインタというメモリを直接扱う仕組みと関わりの深い演算子(&・*・->)が存在します。最初は難しく感じても、少しずつ触れることで理解が深まっていきます。


本ページはプロモーションを含みます。

参考書籍(PR)

C++をもっと学びたい方には「新・明解C++入門編」がおすすめです。


PR

コードを書かずに自動化したい方へ

「学んだけど自分の作業に組み込む時間がない」という方向けに、ダブルクリックで動く Windows専用の自動化ツールをオーダーメイドで作成しています。気になる方は こちらをご覧ください。

コメント

このブログの人気の投稿

#25 Rustで学ぶAI API(ChatGPT等)の呼び出し方の基本

#8 C++で学ぶ文字列操作の基本

#16 TypeScriptで学ぶ辞書型(マップ)の基本