1 、基本タイプ:のconst int型N- :
const int型のn = 20、n個のconst変数を変更し、我々はそれを呼び出すと、20本の数を表す、シンボリック定数を言っていません。これはconstの役割です。Nは別の場所に新しい値を、割り当て直すことができません。
書かれたフォーマット:のconst int型のn = 20;とint型のconst N = 20;彼らは同じです。const int型とそれは書き込む前にセマンティクスには影響を与えません。
このことを念頭に、我々はこれら二つのフォーマットを見て:のconst int型*のPIとのconst * PIをint型 、一つのことを覚えて、int型のconstそのリリース後に同じ、すなわち以前のリリース、彼らは同じですA。
2 、のconst int型* PIのセマンティクス
私の最初は、constのint型* piがどのような役割であるということです。以下の例を参照してください。
int型N1 = 30;
int型N2 = 40;
const int型*のPI =&N1;
PI =&N2; // ここで注目すべきは、piはいつでも新しいメモリアドレスを再割り当てすることができます
N2 = 80; //はそれについて考える:ここにすることができます* PI = 80; 代わりに?もちろん違います
printf("%のD "、* PI); // 出力80
セマンティック分析:
PIの値を変更することができます。すなわち、それは別のアドレスにリダイレクトすることができますが、N2の* PI値を変更することはできません。このルールは、それのロジック前に述べた当社に沿ったものですか?もちろん、ラインで!
最初のconst *パイ修正全体(私は* piのではなく、パイを書いたことに注意してください)。だから、* piが一定である、(パイの意義の範囲内であるが、n2は変数ではなく定数である)割り当てることができません。
piは修正のconstを使用していないので、piはポインタ変数である前に、第二に、割り当ては、別のメモリアドレスにリダイレクトすることができます。
3 、INT * constのパイを見て
確かに、int型のconst *パイ以前のint型のconst * PIが混同するのは非常に簡単になります。注:代わりに、PIの* PIは*の前に書かれた前と後の前文は、constの中に書かれています。もちろん、それは修正限られたパイです。例を見てください:
int型N1 = 30;
int型N2 = 40;
int型* constのパイ=&N1;
// PI =&N2; ここで注意、piは割り当てを再する余裕がないことができませんでした、そしてそれは、もはや別の新しいアドレスを指しています。
N2 = 80; // ここにすることができます* PI = 80; 代わりに?缶、ここ*によるパイn1の修正値を。
// 自分自身の以前の例と比較します。
printf("%のD "、* PI); // 出力80
セマンティック分析:
ここでは、PIの値が変更され再割り当てすることはできませんです。初期化するときには、常にメモリアドレスを指すことができます。代わりに、あなたは*パイを通じてN1の値を変更することができます。前の例との比較では、以下の2点の分析を参照してください
なぜなら修飾CONSTの1)。パイ、それはPIの値を変更できないことを意味ポインタ定数、であるように(すなわち、piはN2変数をリダイレクトすることができません)。
2)全体の前ではありません変更のconst * constのパイを。言い換えれば、* piは変数ではなく定数であるので、我々は、メモリのN1 * PIの値を参照することにより、それを修正することができます。
つまり、このPIは、データの一定の整数変数型へのポインタです。
4は、要約します:
まず、
1)constは*パイ変更した場合には、*パイではなくパイに変更することはできません前に。
CONSTはPI PIの正面に直接書き込まれている場合2)変更することはできません。
第二に、実際には多くの場合、ポインタのみ三つの形式:
1、のconst int型*パイ定数ポインタ。
2、INT * constのパイポインタ自体が一定である、それは「一定のポインタ」と呼ばれる「チャンポインタ。」
3、のconst int型* constのパイ定数ポインタ定数。
図2及び図3の形態は、宣言時に割り当てられなければなりません。
元のアドレスを参照してくださいます。http://blog.csdn.net/yjh0628/article/details/5830153