ポインタ自体も変数です。ですからメモリ内のどこかに置かれているはずです。そのポインタ変数が格納されているアドレスを指すポインタ変数(つまりポインタのポインタ)を作ることはできるのでしょうか。次の例を見て下さい。
ソースコード源文件
|
---|
実行結果
11行目でポインタ p に変数 a の値を代入しています。そして12行目で、ポインタ p の値を pp に代入しています。さて、「**pp」はどのように解釈したらよいでしょうか。 間接参照演算子の結合規則は←(右結合)です。ということは、右側の * が優先されます。つまり「**pp」は *(*pp) ということになります。「*pp」は p の値(a のアドレス)です。とういうことは *(p) と同じです。結局、**pp に10を代入するということは、a に10を代入するということと同になるわけです。 ヌルポインタは、NULL と書き、特別なポインタを意味しています。文字通り解釈すると0番地を指しているポインタのことです。 C言語では、0番地は使わない約束になっており、もしポインタに0が格納されていたら、これは不正なポインタであることを意味します。 関数の戻り値としてポインタが返されることがよくありますが、関数が失敗したときなどに NULL を返すものがたくさんあります。したがってポインタを使うプログラムは、使うポインタが NULL になっていないとこをよく確かめる必要があります。 Chapte6 @ C言語目録 @ HomeWork List @ 昭亮's Homepage |