// ( r21.C ) // ポインタ変数の復習 // #include main() { int* p = new int ; // 例1 *p = 10 ; int i = 100 ; p = &i ; cout << *p << " " << i << "\n" ; i = i + 1 ; cout << *p << " " << i << "\n" ; delete p ; int j ; // 例2 int* q ; q = &j ; *q = 200 ; // q = &j の &j は j のアドレス値を示す cout << *q << " " << j << "\n" ; *q = *q + 1 ; cout << *q << " " << j << "\n" ; int k = 300 ; // 例3 int &r = k ; // int &r の & はアドレス演算子 cout << k << " " << r << "\n" ; r = r + 1 ; // k = k + 1 でも同じ cout << k << " " << r << "\n" ; int v1[] = { 1, 2 } ; // 例A cout << v1[0] << " " << v1[1] << "\n" ; int* v2 = new int[2] ; // 例B v2[0] = 3 ; v2[1] = 4 ; cout << v2[0] << " " << v2[1] << "\n" ; cout << *v2 << " " << ++*v2 << "\n" ; // 上と同じことを表わす delete [2]v2 ; // delete v2[2] はダメ int* s = new int[2] ; // 例C int* fp = s ; *s = 30 ; s++ ; *s = 40 ; s = fp ; cout << "s : " << *s << endl ; s++ ; cout << "s : " << *s << endl ; delete [2]s ; int (*v3)[2] = new int[3][2] ; // 例D int* v3[2] はダメ v3[0][0] = 5 ; v3[0][1] = 6 ; v3[1][0] = 7 ; v3[1][1] = 8 ; v3[2][0] = 9 ; v3[2][1] = 10; delete v3 ; // エラ−はでないが、多分ちゃんと領域を解放していない! } /* [結果] 100 100 101 101 アドレス演算子 & を使う時は注意すること 200 200 201 201 300 300 301 301 */