char * const と const char * の違いは何ですか?

違いは const char * const char へのポインタです 、 char * const の間 char への定数ポインタです .

最初に、指されている値は変更できませんが、ポインターは変更できます。 2 つ目は、ポイントされている値は変更できますが、ポインターは変更できません (参照と同様)。

もあります
const char * const

これは、定数 char への定数ポインターです (したがって、何も変更できません)。

注:

次の 2 つの形式は同等です:

const char *

そして

char const *

この正確な理由は C++ 標準で説明されていますが、注意して混乱を避けることが重要です。以下を好むいくつかのコーディング標準を知っています:

char const

以上

const char

(ポインターの有無にかかわらず) const の配置 要素はポインター const と同じです .


混乱を避けるために、常に 追加 const 修飾子。

int       *      mutable_pointer_to_mutable_int;
int const *      mutable_pointer_to_constant_int;
int       *const constant_pointer_to_mutable_int;
int const *const constant_pointer_to_constant_int;

const 常にその前 (左側) にあるものを変更しますが、それが型宣言の最初のものであり、その後 (右側) にあるものを変更する場合を除きます。

したがって、これら 2 つは同じです:

int const *i1;
const int *i2;

const int へのポインタを定義します . i1 の場所を変更できます および i2 ポイントですが、それらが指している値を変更することはできません。

これ:

int *const i3 = (int*) 0x12345678;

const を定義します 整数へのポインターを呼び出し、メモリ位置 12345678 を指すように初期化します。 int を変更できます アドレス 12345678 の値ですが、i3 のアドレスを変更することはできません を指しています。