前回
マクロ (macro)
マクロはただ単にコードを置換するだけのものです。
#include <stdio.h>
#define TIME 5
// #define DEBUG
int main() {
int a = 10;
for (int i = 0; i < TIME; i++) {
a += 4;
// DEBUGが定義されているときのみ printf("i: %d, a: %d\n", i, a); が処理される
#ifdef DEBUG
printf("i: %d, a: %d\n", i, a);
#endif
}
printf("a: %d", a);
return 0;
}
三項演算子 (ternary operator) b ? x : y
三項演算子はif文と違って短く、簡潔に書くことができます。
どちらがいいかは目的によって異なってきます。
int a = 8, res;
// if文
if (a == 8) {
res = 1;
} else {
res = 2;
}
// 三項演算子
res = (a == 8 ? 1 : 2);
定数2 (const)
前回の定数もマクロですが、ただ単に置換しているだけで定数2とは違って文字列となっています。
const double TAX = 1.10;
ポインタ (pointer) &n
ポインタ変数は変数のアドレスを入れるためのもので、記述方法は変数名の前に*を付けます。
変数のアドレスは&をすでにつくられた変数名の手前に置きます。
以下のように記述します。
int n = 5; // 整数型変数num をつくって 5 を入れる
int *p = &n; // ポインタ変数p に n のアドレスを入れる
// ポインタ変数(nのアドレス)を出力
printf("%p\n", p); // 出力: "0x7ffdf0fdd0d4"
// ポインタの参照元(n)の数値を出力
printf("%d\n", *p); // 出力: "5"
ポインタはscanf() のように返り値をそのまま代入せずに呼ぶだけで関数内で値を代入することができます。
%p はポインタのフォーマット指定子です。
最後に
三項演算子やマクロって便利ですな!
昔、ポインタで一度混乱したことがありますが、変数(箱)のアドレス(住所)を記したメモ書きと思えばイメージが湧くでしょう。