[C++]constとポインタの関係

1853 ワード

まず基礎を素早く復習します.
次の宣言と定義式を考慮します.int p = 10;
pのベースデータ型はintである.
次の宣言と定義式を考慮します.const int a = 10;
aのベースデータ型はint,aは定数オブジェクトであるため,宣言時に初期化する必要がある.
次の文を考慮します.const int a = 10; int *ptr = &a;
エラー.整数ポインタを整数定数オブジェクトに向けることはできません.const int* ptr = &a; // !
ポインタの左側にconst修飾子がある場合は、「定数を指すポインタ」と呼ばれます.名前の通り、コンパイラは、このようなポインタを宣言して初期化すると、そのポインタが「定数」を指すことをデフォルトに設定します.なぜここの「定数」は二重引用符を打つのですか?実際には、「定数を指す」というポインタは「自分で考えている」だけなので、実際には「定数を指すポインタ」を非常に多くのオブジェクトに指すことができます.たとえば、次のようにします.double x = 10.1; const double* ptr = &x;
ここで、ptrという「定数を指すポインタ」は、自分が指しているのは定数だと思っているが、実際にはオペレータが自分でxを任意に付与することができ、ptrポインタでxを修正することはできないだけである.
Hint:const type*のようなポインタの特徴は、指すオブジェクトの値を変更できないことです.
次の宣言と定義式を考慮します.double num = 1.1; double* const ptr = #
ポインタの右側にconst修飾子がある場合は、「定数ポインタ」と呼ばれます.  はどのように理解しますか?[定数を指す](指向性定数)がポインタが[定数オブジェクト](Constant Objects)を指す場合、[定数ポインタ](Constant Points)はポインタ自体の値が一定の定数であることを示します.
右から左へ音明式の意味を理解する習慣を提案する.たとえばdouble* const ptr = #では、左から右に行くと、const ptr自体が定数オブジェクトであることがわかりますが、*const ptrはptrが「定数ポインタ」であることを示し、左側のdoubleはオブジェクトのベースデータ型を示しています.
ポインタに格納されている値は何ですか?もちろん対象の住所を指します.したがって、より具体的には、「定数ポインタ」宣言時に初期化して1つのオブジェクトのアドレスを得る必要があるが、そのポインタ自体の値、すなわち、指すオブジェクトのアドレスは変更できないためである.
したがって、「定数ポインタ」がオブジェクトを指すと、次のような文は不正です.double num = 1.1; double num2 = 1.2; double* const ptr = # ptr = &num2: // invalid!!!
次の宣言と定義式を考慮します.int m = 10; const int* const pip = &m;
上の叙述を総合すると、この表現はもうあなたを倒すことができないと信じています.
右から左へ読むと、const pipはpipが定数オブジェクトであることを示し、int*const pipはpipがint型の定数ポインタであることを示し、左側のconstはpipが「定数」を指すことを示す.総合するとpipは「定数を指す定数ポインタ」です.