簡単な記憶方法:
const
は定数、*
はポインタです*
前後の場合はconst
ポインタ定数となり、* const
アドレスは変化しません。const
前後*
とも定数ポインタ:const *
値は変わりません
定数へのポインタ:指针指向的地址为常量
-
ポインタ定数が指すメモリ アドレスは不変です。
-
ポインタ定数を定義する場合は、初期化する必要があり、ポインタの値は変更できません (つまり、指すポインタは不変です)。
-
ポインター定数を使用すると、指すオブジェクトの値を変更できます。
サンプルコード:
int value = 1; int* const ptr = &value; // ptr是指针常量,指向value的地址 *ptr = 100; // 正确,可以通过指针常量修改value的值 ptr = nullptr; // 错误,无法修改指针常量指向的地址
定数ポインタ:指针指向"常量"对象的地址
-
定数ポインターを定義する場合、初期化する必要はありません。または、後で初期化することもできます。
-
定数ポインタは、オブジェクトの値がポインタを通じて変更できないことのみを要求し、オブジェクトの値が他の手段を通じて変更できないことを規定するものではありません。
-
定数ポインタが指す変数は、必ずしも
const
定数ポインタである必要はありません。定数ポインタとして宣言することは、変数が指す値をポインタを介して変更できないことを意味します。ただし、変数自体が定数でない場合は、変更できます。他の手段を通じて変更される可能性もあります。 -
サンプルコード:
int value = 1; const int* ptr = &value; // ptr是常量指针,指向value的地址 int const* ptr = &value; // 两种写法都可以 *ptr = 100; // 错误,不能通过常量指针修改value的值 ptr = nullptr; // 正确,可以修改常量指针的值,使其指向其他地址
定数への定数ポインタ:
-
ポインタが指すオブジェクトの値もアドレスも変更できません。
-
サンプルコード:
int value = 1; const int* const ptr = &value; //内容与地址均不可改变 *ptr = 100; // 错误,不能修改其值 ptr = nullptr; // 错误,不能修改其地址