読者です 読者をやめる 読者になる 読者になる

本日の復習

関数形式マクロ

#define mul(a, b)    ((a) * (b))
a = mul(5, 4);

の様に使うと、5 * 4の結果を返す。

((a) * (b))

としているのは、変数を使って演算する時に計算の優先順位がおかしくなるため。

#define mul(a, b)    (a * b)
a = mul(x + 100, y + 200);

は、展開されると以下の様になり、意図した結果を得られない。

a = x + 100 * y + 200

ポインタの基礎

  • ポインタ型変数

変数がポインタ型であることを明示する。

int  a = 10;    /* 変数の宣言、初期化 */
char b = 'b'    

int  *pa;        /* ポインタ型変数の宣言 */
char *pb;
pa = &a;    /* 変数aのアドレスをpaに設定する */
pb = &b;
printf("%d\n", *pa);
printf("%c\n", *pb);

アドレス演算子「&」を変数の前につけると、その変数のアドレスを取り出せる。
間接演算子「*」を変数の前につけると、そのアドレスの内容を取り出せる。