24. const修飾子
constポインタ(1)
● 関数の引数でRead onlyなポインタ変数(と参照
変数)には、constを付けましょう!
int add(const int *a, const int *b) {
return *a + *b;
}
int add(const int &a, const int &b) {
return a + b;
}
● 読み手にとって、非常に読みやすくなります!
24
25. const修飾子
constポインタ(2)
● const int *a と int *const a の違い?
– const int *a は、指している先(value)へのconst性の付与
● OK: a++;
● NG: (*a)++;
– int *const a は、それ以外を指せないようにする(addressへのconst
性の付与)。指している先の値は変更可能。
● NG: a++;
● OK: (*a)++;
● const int *const a とかもできます
● const int *const *const b なんていうのも・・・
25
69. 関数ポインタ
構造体を用いた見た目C++コード
● 以下のようなコードだと、パッと見た感じC++っぽ
く見えますよね
typedef struct {
int (*add)(int, int);
int (*sub)(int, int);
} obj_st;
int add(int a, int b) {
return a + b;
}
int sub(int a, int b) {
return a - b;
}
int main(void) {
obj_st os = {add, sub};
printf("2 + 5 = %dn", os.add(2, 5));
printf("9 - 6 = %dn", os.sub(9, 6));
return EXIT_SUCCESS; 69
}