🐸
constの備忘録
概要
constの位置とその意味の備忘録です。
1) プリミティブ型
(1-1) 値(a)は変更可能
char a;
a = 0; // OK
// コンパイル確認 https://wandbox.org/permlink/fBAWA6zuXPI5Mye7
(1-2) 値(a)は変更不能
char const a = 0; // const char a = 0;でも同じ意味
a = 0; // NG(コンパイルエラー)
2) ポインタ型
(2-1) ポインタが指す値(*A)は変更可能。ポインタ自体(A)も変更可能
char a;
char *A = &a;
*A = 0; // OK
A = &a; // OK
(2-2) ポインタが指す値(*A)は変更不能。ポインタ自体(A)は変更可能
char a;
char const *A = &a; // const char *A でも同じ意味
*A = 0; // NG(コンパイルエラー)
A = &a; // OK
(2-3) ポインタが指す値(*A)は変更可能。ポインタ自体(A)は変更不能
char a;
char *const A = &a;
*A = 0; // OK
A = &a; // NG(コンパイルエラー)
(2-4) ポインタが指す値(*A)は変更不能。ポインタ自体(A)も変更不能
char a;
char const *const A = &a; // const char *const A でも同じ意味
*A = 0; // NG(コンパイルエラー)
A = &a; // NG(コンパイルエラー)
3) ダブルポインタ型
(3-1) ダブルポインタが指す値(**A)は変更可能。ダブルポインタが指すポインタ(*A)は変更可能。ダブルポインタ自体(A)は変更可能
char a;
char *aa = &a;
char **A = &aa;
**A = 0; // OK
*A = nullptr; // OK
A = nullptr; // OK
(3-2) ダブルポインタが指す値(**A)は変更不能。ダブルポインタが指すポインタ(*A)は変更可能。ダブルポインタ自体(A)は変更可能
char a;
char const *aa = &a;
char const **A = &aa; // const char **A でも同じ意味
**A = 0; // NG(コンパイルエラー)
*A = nullptr; // OK
A = nullptr; // OK
(3-3) ダブルポインタが指す値(**A)は変更可能。ダブルポインタが指すポインタ(*A)は変更不能。ダブルポインタ自体(A)は変更可能
char a;
char *const aa = &a;
char *const *A = &aa;
**A = 0; // OK
*A = nullptr; // NG(コンパイルエラー)
A = nullptr; // OK
(3-4) ダブルポインタが指す値(**A)は変更可能。ダブルポインタが指すポインタ(*A)は変更可能。ダブルポインタ自体(A)は変更不能
char a;
char *aa = &a;
char **const A = &aa;
**A = 0; // OK
*A = nullptr; // OK
A = nullptr; // NG(コンパイルエラー)
(3-5) ダブルポインタが指す値(**A)は変更不能。ダブルポインタが指すポインタ(*A)は変更不能。ダブルポインタ自体(A)は変更不能
char a;
char *const aa = &a;
char const *const *const A = &a;
**A = 0; // NG(コンパイルエラー)
*A = nullptr; // NG(コンパイルエラー)
A = nullptr; // NG(コンパイルエラー)
覚え方
constの場所がいくつもポインタでは、全パタンを記憶するのはうわーってなります。
constの1つ左にあるキーワードをconstにすると覚えといいかも。
あとはその足し算で意味を考えるとよい。
つまり、以下を覚えておく。
ポインタ型
項番 | 位置 | constにするもの | 例 |
---|---|---|---|
1 | char const *A |
ポインタが指すcharの値 | (2-1)を参照 |
2 | char *const A |
ポインタの値 | (2-2)を参照 |
ダブルポインタ型
位置 | constにするもの | 例 |
---|---|---|
char const **A |
ダブルポインタが指すcharの値 | (3-2)を参照 |
char *const *A |
ダブルポインタが指すポインタの値 | (3-3)を参照 |
char **const A |
ダブルポインタの値 | (3-4)を参照 |
まとめ
やさしいconstの覚え方でした。
Discussion