ポインターと const を扱う場合、それらを宣言する方法が 3 つあります。
1)
int nValue = 5;
int *const pnPtr = &nValue;
2)
int nValue = 5;
const int *pnPtr = &nValue;
3)
const int 5;
const int *const pnPtr = &nValue;
例 1 は、「非 const への const ポインター」と呼ばれます。アドレスは変更できませんが、値は変更できます。例 1 の nValue は非 const int であるため、次のようなことができます。
int nValue = 5;
int const *pnPtr = &nValue;
*pnPtr = 6;
ただし、例 1 では次のことはできません。
int nValue = 5;
int nValue2 = 6;
int const *pnPtr = &nValue;
pnPtr = &nValue2;
例 2 は「const へのポインタ」と呼ばれます。つまり、アドレスは変更できますが、値は変更できません。次のことができます。
int nValue = 5;
int nValue2 = 6;
const int *pnPtr = &nValue;
pnPtr = &nValue2;
ただし、例 2 では次のことはできません。
int nValue = 5;
int nValue2 = 6;
const int *pnPtr = &nValue;
*pnPtr = nValue2;
例 3 は、「const への Const ポインター」です。これは、アドレスも値も変更できないことを意味します。
const int nValue;
const int *const pnPtr = &nValue;
私の質問は、2 番目の例に関連しています。nValue が const でない場合、2 番目の例が「const へのポインター」と呼ばれるのはなぜですか。通常の int 宣言です。また、2 番目の例で、別のアドレスを割り当てたときに、その別のアドレスが異なる値を持っている場合、そのアドレスを参照して別の値を返すことはできないのでしょうか? それは目的全体を無効にしないでしょうか?