浅談constキーワード
3525 ワード
constはC言語(ANSI C)のキーワードであり、変数が変更されず、静的な役割を果たすことを制限する.constを使用すると、プログラムの安全性と信頼性がある程度向上します.また、他の人のコードを見ているときにconstの役割をはっきり理解することは、相手のプログラムを理解するのにも役立ちます.
定義:通常タイプとは、タイプ修飾子constを使用して説明されるタイプで、通常タイプの変数またはオブジェクトの値は更新できません.(もちろん、私たちは梁を盗んで柱を変えて更新することができます)
目的:constが発売した初期の目的は、プリコンパイル命令に取って代わって、その欠点を解消し、同時にその利点を継承するためである.
constのCでの使い方は柔軟で、個人的には次の基準の定義が難しいと感じたので、百科事典の定義を借りました.使い方が柔軟すぎるため、定義を理解するのは難しいようです.
以下に簡単な栗をいくつか挙げて、例の中でconstの本質と使用を検討して、もしあなたがすべて理解することができるならば更に時間を浪費して下を見る必要はありません.
const int n = 5; int a[n];```
この問題は「定数」と「読み取り専用変数」の違いを論じている.定数、例えば5、「abc」などは、必ず読み取り専用です.定数はコンパイラによってメモリに格納されている読み取り専用領域なので、もちろん修正することはできません.読み取り専用変数はメモリに値を格納する場所を開きますが、この値はコンパイラによって制限されているため変更できません.C言語キーワードconstは、変数が変更されてはいけない修飾子(Qualifier)を定義するために使用される.上記のコードでは変数nは読み取り専用変数に修飾されているが,残念ながらいくら修飾しても定数ではない.ANSI Cでは配列定義時の長さを「定数」にし、「読取り専用変数」ではいけません.「定数」は「可変変数」に等しくありません.の下のコードコンパイラはエラーを報告します.すみません、どの文がエラーですか?
const int nValue;//nValueはconst const char pContent;//pContentはconst、pContent可変const char*const pContent;//pContentも*pContentもconst`` constは後で、上の声明と対等
int const * p1,p2;```
p 2はconstです.(p 1)は全体であるため(p 1)はconstであるが,p 1は可変である.int*p 1,p 2はp 1が整数を指すポインタのみを表し,p 1,p 2がポインタであることを表すにはint*p 1,*p 2と書く必要がある.だから*const p 1,p 2でもconst*p 1,p 2でも、中の*はp 1に属しています. const * const
int * const p1,p2;```
p 1はconst、(*const p 1)は全体なので、constはp 2を修飾しない.ポインタは、その指向変数の値の変化 を指す.
constが左にある場合、ポインタが指す変数の値はポインタで直接変更できません(他の方法で変更できます).の右側にあると、ポインタの指向は可変ではありません.「左定値、右方向」と略記します.ポインタが指す変数の値は変更できず、可変 を指す.
int x = 1; int y = 2; int* const px = &x; px = &y;//エラー、ポインタの変更を許可しません*px=3;//正しく、ポインタが指す変数の値``を変更できます.ポインタが指す変数の値は可変ではなく、可変 を指す.
定義:通常タイプとは、タイプ修飾子constを使用して説明されるタイプで、通常タイプの変数またはオブジェクトの値は更新できません.(もちろん、私たちは梁を盗んで柱を変えて更新することができます)
目的:constが発売した初期の目的は、プリコンパイル命令に取って代わって、その欠点を解消し、同時にその利点を継承するためである.
constのCでの使い方は柔軟で、個人的には次の基準の定義が難しいと感じたので、百科事典の定義を借りました.使い方が柔軟すぎるため、定義を理解するのは難しいようです.
以下に簡単な栗をいくつか挙げて、例の中でconstの本質と使用を検討して、もしあなたがすべて理解することができるならば更に時間を浪費して下を見る必要はありません.
1. const int num = 10;//num
2. const int array[5] = {1, 2, 3, 4, 5}; //
3. const int *p ; // (*p)
4. int * const p ; //p
5. const int * const p ; // p (*p) ```
case1, , num ,case2 , 。 , , , !
bug :
- const[ ] ,ANSI C ?
const int n = 5; int a[n];```
この問題は「定数」と「読み取り専用変数」の違いを論じている.定数、例えば5、「abc」などは、必ず読み取り専用です.定数はコンパイラによってメモリに格納されている読み取り専用領域なので、もちろん修正することはできません.読み取り専用変数はメモリに値を格納する場所を開きますが、この値はコンパイラによって制限されているため変更できません.C言語キーワードconstは、変数が変更されてはいけない修飾子(Qualifier)を定義するために使用される.上記のコードでは変数nは読み取り専用変数に修飾されているが,残念ながらいくら修飾しても定数ではない.ANSI Cでは配列定義時の長さを「定数」にし、「読取り専用変数」ではいけません.「定数」は「可変変数」に等しくありません.
typedef char * pStr;
char string[4] = "bbc";
const char *p1 =" string"; //1
const pStr p2 =" string"; //2
p1++;
p2++;```
:
> p2++ 。
####const : const type m; m 。
m 1 *p1, const char *p1; *p1 , p1 , p1++ 。 type 2 pStr, const pStr m; m , pStr , p2 [1] ,p2++ 。
- const
const int nValue;//nValueはconst const char pContent;//pContentはconst、pContent可変const char*const pContent;//pContentも*pContentもconst``
int const nValue; //nValue const
char const * pContent; //*pContent const, pContent
char* const pContent; //pContent const,*pContent
char const* const pContent; //pContent *pContent const```
> :
const C , , , , :
const , const 。 :const int a int const a a const。 * , *pType , pType
** : *, , :char const * pContent, char const (* pContent), * pContent const, pContent 。**
1. ####const *
int const * p1,p2;```
p 2はconstです.(p 1)は全体であるため(p 1)はconstであるが,p 1は可変である.int*p 1,p 2はp 1が整数を指すポインタのみを表し,p 1,p 2がポインタであることを表すにはint*p 1,*p 2と書く必要がある.だから*const p 1,p 2でもconst*p 1,p 2でも、中の*はp 1に属しています.
int const * const p1,p2;```
>p2 const, const ,*p1 const , p1 const 。
3. #### * const
int * const p1,p2;```
p 1はconst、(*const p 1)は全体なので、constはp 2を修飾しない.
constが左にある場合、ポインタが指す変数の値はポインタで直接変更できません(他の方法で変更できます).の右側にあると、ポインタの指向は可変ではありません.「左定値、右方向」と略記します.
int x = 1;
int y = 2;
const int* px = &x;
int const* px = &x; //
px = &y; // ,
*px = 3; // , ```
- ,
int x = 1; int y = 2; int* const px = &x; px = &y;//エラー、ポインタの変更を許可しません*px=3;//正しく、ポインタが指す変数の値``を変更できます.
int x = 1;
int y = 2;
const int* const px = &x;
int const* const px = &x;
px = &y; // ,
*px = 3; // , ```