constの理解、constポインタ、constを指すポインタ

2208 ワード

1、constの理解
constはC言語(C++)のキーワードであり、constキーワードは変数を読み取り専用の変数に変えることであり、決してこの変数を定数に変えることではないことに注意しなければならない.すなわちconst修飾された変数が読み取り専用の変数になった後,この変数は右値(他人に値を付与するしかない)としてのみ,決して左値(他人の値を受信できない)としてはならない.
 
const修飾された変数は,定義時に初期化される.
const int a = 10;  //   

const int a;  //   

 
constキーワードが最も役に立つのは、関数を限定するためのパラメータです.
func(const char *ptr)
{
}

これによりfunc関数は、実パラメータポインタが指すデータを変更しませんが、他の関数は変更できます.
constは本質的にreadonlyと命名されるのが適切である.
 
2、constへのポインタ
まず、ポインタですが、このポインタはconstタイプのポインタを指します.
一般:
const int *p  //       
int const *p   
    :   P      ,P      (*P)        const int    。

   ,:    P       ,       const int    ,                   。

一言で言えば、Pというアドレスは勝手に指すことができますが、アドレスに保存されている値は変更できません.
3、constポインタ
まずポインタですが、このポインタはconstタイプ、すなわちこのポインタ変数のアドレスであり、初期化後にのみ、このアドレスを指し続け、アドレスが保存されている内容は可変です.
int * const p =    //   P              ,        

まず,このPはポインタであり,このポインタはintタイプのconstポインタを指す.ただし、アドレスは固定されており、変更はできませんが、アドレスに保存されている数値は確かに可変です.例えば、
*p = 3;

 
4、ポインタも内容も可変ではない
名前の通り、ポインタのアドレスとアドレスが保存されている内容は可変ではありません.
const int * const p =    
int const * const p =    

Pはポインタですが、このポインタは、前にconstが修飾されているので、このPポインタはポインタ定数なので、Pのアドレスが固定されているので、初期化するしかありません.*pについては、前にconstが修飾されているので、*pは定数であり、つまりpはアドレスを指し、アドレスに保存されているデータは定数であり、変更できない.
5、記憶を理解する
実はconstの位置を見ています.constは、ポインタのアスタリスクの前に、constを指すポインタ、すなわち*pの内容が定数であり、変更されない.
constがアスタリスクの後になると、constを指すポインタ、つまりこのポインタが指すアドレスは、変更できないので、constポインタは初期化しなければなりません.そして、このアドレスはずっと固定されていて、内に変更できません.