C / C ++では、ポインターを変更するためにconstが頻繁に発生し、ポインター定数と定数ポインターが発生します。それはしばしば使用中にめちゃくちゃにされ、そしてこれに対していくつかの分類が行われます。
1.定数ポインター
名前が示すように、定数ポインターは基本的にポインターですが、定数を使用して装飾されています。これは、ポインターが定数を指していることを示します(実際、後で変数を指すこともあります)。ここでベクトルを指す意味は、ポインターを介して変数の値を変更できないことです。次の例を見てみましょう:
int main(int argc, char *argv[])
{
const int a = 10;
int b = 20;
const int* p_const;
int *p_variable;
p_const = &a; // const pointer can point to const or variable
p_const = &b; // const pointer can point to const or variable
//p_variable = &a;//[Error] error: invalid conversion from `const int*' to `int*'
p_variable = &b;// Ok
//*p_const =100;//[Error] error: assignment of read-only location
*p_variable = 200;//OK, equal b =200
b = 300;//b can be aassigned by variable b
return 0;
}
上記の結果から、結論を導き出すことができます。1.ポインターはconstで変更され、const型の変数または初期化された通常の変数を指すことができます。2. constで変更されたポインターを使用して、ポインターが指す変数の値を変更することはできませんが、変数(初期化後の通常の変数)の値は、変数で定義された変数名で変更できます。3. constで変更されたポインターは、constで変更された変数またはconstで変更されていない変数を指すことができます。ただし、const変更のないポインターはconst変更のない変数のみを変更できるため、C / C ++の仮パラメーターとして、const型のポインターがよく使用されます。指摘された変数の値の変更を回避できるためです。
つまり、constポインター変数の変更の目的は、ポインターによって変数の値が変更されるのを防ぐことです。
2.ポインター定数
ポインター定数とは、ポインター変数に格納されているアドレスが定数であり、変更できないことを意味します。フォームは通常、データ型* constポインタとして記述されます。以下に例を示します。
int main(int argc, char *argv[])
{
int a = 10;
int b = 20;
int * const const_pointer = &a; // value of const_pointer is a address
int *pointer = &b;
*const_pointer = 100;//ok equal a=100
*pointer = 200; //ok equal b=200
const_pointer = &b;//[Error] error: assignment of read-only variable `const_pointer'
const_pointer ++;//[Error] error: assignment of read-only variable `const_pointer'
pointer = &a;//OK, value of pointer is a address
pointer ++;//OK, value of pointer increase by 1
return 0;
}
上記の例から結論付けることができます。1.ポインター定数に格納されたアドレスは変更できないため、ポインターの割り当てやその他の操作はできませんが、ポインターが指す変数は変更できます(定数ポインター定数は許可されません)。
つまり、ポインタ定数は通常の変数定数に似ており、初期化後は(ポインタの場合はアドレスである)彼が格納する値は変更できません。