大阪市中央区 システムソフトウェア開発会社

営業時間:平日09:15〜18:15
MENU

[C言語入門] 演算子の使い方(16)

著者:高木信尚
公開日:2018/12/29
最終更新日:2018/12/29
カテゴリー:技術情報

高木です。こんばんは。

昨日は会社の忘年会でした。
建前上はそれで年内の業務は終了なんですが、私は今日も明日も仕事です。
仕事があるのはありがたいことなので、あともう少し頑張りたいと思います。

さて、年内に「演算子の使い方」を完結させなければなりませんのでピッチを上げていきます。
今回は代入演算子の解説です。
これで、残りはコンマ演算子だけになります。

代入演算子

代入演算子はオブジェクトに値を格納するための演算子です。
値の代入は左オペランドに対して行われます。
値を代入するゆえ、左オペランドは変更可能な左辺値でなければなりません。

左辺値であっても変更可能でないケースというのはあります。
具体的にはconst修飾されているとか、配列だとかが該当します。

代入演算子は大きく分けて、「単純代入」を行うものと「複合代入」を行うものがあります。
「単純代入」は単に値のコピーを行うのに対して、「複合代入」では何らかの演算を行った結果を格納することになります。

単純代入

「単純代入」を行う代入演算子は = で表します。
見かけとは裏腹に数学的な等号とは意味が異なります。
数学的な等号に近いのは、等価演算子の == のほうです。

=演算子を用いて代入できるのは、スカラ型、構造体型、共用体型のいずれかです。
配列型のオブジェクトを代入することはできません。

_Bool型の左オペランドにスカラ型の値を代入する場合、スカラ型の値がゼロであれば0が、非ゼロであれば1が代入されます。

左オペランドがポインタの場合、代入できるのは適合する型のポインタ、空ポインタ定数、またはvoid型の修飾版または非修飾版へのポインタです。
右オペランドが修飾された型へのポインタの場合、左オペランドは右オペランドの修飾子すべてを持つ型へのポインタでなければなりません。

複合代入

代入演算子には、何らかの算術演算、シフト演算子またはビット単位の演算を両方のオペランドに対して行った結果を代入する「複合代入」のための演算子があります。
複合代入演算子は、対応する二項演算子のあとに=を付けた形で表します。
具体的には、次のような演算子があります。

+= -= *= /= %= <<= >>= &= ^= |=

複合代入演算子のオペランドは、対応する二項演算子のオペランドとなり得る型でなければなりません。
また、左オペランドは、対応する二項演算子の評価結果を代入できる型でなければなりません。

たとえば、+演算子のオペランドであれば整数型とポインタ型の組み合わせが可能ですが、整数 + ポインタの評価結果(すなわちポインタ)を整数型のオブジェクトには格納できません(多くの処理系では警告が出ることはあっても代入できてしまいますが・・・・・・)。
しかたがって、整数 += ポインタのような使い方はできません。

    上に戻る