🐸

constの備忘録

2023/11/03に公開

概要

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