C|constキーワード

1847 ワード

constはC言語のキーワードであり、重要な地位を占めている.変数が変更されず、静的な役割を果たすことを制限します.constキーワードを使用すると、プログラムのセキュリティと信頼性がある程度向上します.また、他人のコードを見ているときにconstが果たす役割を明確に理解することは、相手のプログラムを理解するのにも役立ちます.またconstは、Pascal、C+、PHP 5、B#などの他のプログラミング言語にも登場する.Net、HC 08 C、C#など.
const修飾変数を常変数と呼ぶ.コンパイル段階では,常変数が左値であるか否かを判断し,その他の処理は変数と同じである.
const修飾ポインタの場合は、一般的に以下の4つのケースに分けられます.
int b = 200;
const int* a = &b;        //   1
int const *a = &b;        //   2
int* const a = &b;        //   3
const int* const a = &b;  //   4

constが*の左側にある場合、constはポインタが指す変数、すなわちポインタが定数を指すことを修飾するために使用されます.
constが*の右側にある場合、constは修飾ポインタ自体、すなわちポインタ自体が定数です.
1、ケース1:
ケース1とケース2は同じで、ポインタが指すコンテンツが定数(constが変数宣言子に置かれている位置に関係なく)である*の左側にconstが位置している場合、コンテンツの変更操作は許可されません.
例えば、aが倉庫管理者であれば、彼が入った倉庫b、中の貨物(*a)は彼が動くことを許可する権限がなく、倉庫の中のものはもともと何だったのか.
int b = 200;
const int* a = &b;
*a = 300;  //  

しかし、(*a)の値を変える方法もあります.
(1)bの値を変更することにより、(*a)の値を変更する.
int b= 200;
const int* a = &b;
b = 300;
cout << *a << endl; //  300

(2)aを別の場所に指し示すこと(管理者が倉庫を変えること)により、(*a)の値を変更する.
int b= 200,c = 300;
const int* a = &b;
a = &c;
cout << *a << endl; //  300

ケース1の場合、初期化を行わなくてもよい.ポインタの内容は定数ですが、ポインタ自体は定数ではありませんから.
2、ケース2:
ケース1と同様、ここではこれ以上説明しない.
3、状況3:
constは*の右側にあり、ポインタ自体が定数です.この場合、ポインタ自体を変更することはできませんが、ポインタが指す内容は定数ではありません.
例えば、aが倉庫管理者であれば、彼は指定された倉庫に入るしかなく、他の倉庫に行くことはできない(だからa++は間違っている).しかし、この倉庫の中の貨物(*a)は勝手に動くことができます.
また、ケース3では、定義とともに初期化する必要があります.
int b = 200,c = 300;
int* const a; //  ,     
int* const a = &b; //  ,     
*a = 600;   //  ,    *a  
cout << a++ << endl;  //a++  

4、状況4:
ケース4では,ポインタ自体と指向するコンテンツはいずれも定数である.
例えば、この倉庫管理者は特定の倉庫に行くしかなく、倉庫の中のすべての貨物を変更する権限がありません.