第11章 ポインタ
11.1 概要
char ch = 'a'; // オブジェクト
char* p; // ポインタ
p = &ch; // pにchのアドレスを入れる

11.2 ポインタの宣言
char* cp; // char型のオブジェクトを指すことのできるポインタ
int* ip; // int型のオブジェクトを指すことのできるポインタ
double* dp; // double型のオブジェクトを指すことのできるポインタ

11.3 ポインタ演算子
&:オブジェクトのアドレスを取り出す
*:ポインタの指すオブジェクトの値を参照する(間接参照)
11_11-3 
 
11.4 直接参照と間接参照
char dt, ch = 'a';
char* p = &ch;
dt = ch; // 直接参照
dt = *p; // 間接参照

11.5 ポインタのアドレス設定
int* ip;
*ip = 100;
不正なアドレスに書き込みを行って危険なため、通常はコンパイラが「ポインタipが初期化されていない」という警告を出します。
代表的なポインタ設定の例を次に示します。
例1:変数のアドレスを&演算子で代入する
int d;
int* p = &d;
例2:配列の先頭アドレスを代入する。配列名ssは配列データの先頭アドレスをもっているため&ssとする必要はない
char ss[80];
char* p = ss;
例3:配列の1要素のアドレスを&演算子で代入する
char ss[80];
char* p = &ss[3]; // ss[3]のアドレスを設定
char* p = ss + 3; // これでもよい
例4:文字列リテラルの先頭アドレスを設定する。ここでは"abcd"という文字列をメモリ上に確保し、その先頭アドレスがpに設定される
char* p;
p = "abcd";
例5:動的にメモリを確保し、その先頭アドレスを設定する
char* p;
p = new char[80]; // 80文字分のメモリ確保
 
11.6 ヌルポインタの設定
char* p;
p = 0; // 0を設定する
if (p == 0) // ポインタに設定がなければ
if (!p) // 同上
 
11.7 ポインタのアドレスを変更する
int *p, n, a = 100, b = 200;
p = &a; // pはオブジェクトaを指す
n = *p; // nは100になる
p = &b; // pはオブジェクトbを指す
n = *p; // nは200になる
 
11.8 ポインタと配列
 
11.9 ポインタの演算と比較
 
11.10 ポインタによる文字列処理
 
11.11 ポインタの配列
 
11.12 ポインタのポインタ
 
11.13 ポインタを仮引数に使う
 
11.14 関数へのポインタ