[C言語] Cパズルブック 1.2 代入演算子

『Cパズルブック』(Alan R.Feuer, 1985)
[M1 Mac, Big Sur 11.7.2, clang 13.0.0, NO IDE]

『Cプログラミングの落とし穴』をようやく読了しました。今後もプログラミングに関する名著を継続して読んでいきます。

次はベル研究所内の教材を元に製作された『Cパズルブック』です。1985年の初版なので記述形式はK&Rスタイルになります。

1.2の3番目はまずy==zで左辺右辺を比較していてイコールが成り立つのでTRUE 1になり、これをxに代入するためPRINTXの出力は1になります。比較演算子==と代入演算子=の使い分けが出題の目的です。

4番目は式自体はx = 1,とy = z = 4の比較でFALSE 0になりますが、xは1のままですから1が出力されます。

第8章までありますが、来年1月中の読了を目指します。これを読み切ったら、以前さらっと目を通しただけのK&R 第2版(ANSI C)に取り組みます。

#include <stdio.h>
#define PRINTX printf("%d\n",x)

int main() {
    int x = 2, y, z;

    x *= 3 + 2;  // 10
    PRINTX;

    x *= y = z = 4; // 40
    PRINTX;

    x = y == z; // 1
    PRINTX;

    x == ( y = z); // 1
    PRINTX;

    return 0;
}

[C言語] ダブルポインタの概念 **ptr

ダブルポインタの概念を自分なりにまとめました。

ポインタ変数の関連データの中でそのメモリアドレスを表現するために必要な概念であると解釈しました。

ポインタのポインタなので云々とメモリへの格納が数珠つなぎになっている説明図をよく見かけますが、私の場合は余計に学習を妨げるだけでした。

そもそもメモリやCPUなどハードの知識がないとC言語の根本的な理解は厳しいように思います。