==C++ ポインタ==
[[C++][C++によるオブジェクト指向プログラミング]]
{{amazon|4756118895}}
=====例=====
#include <<iostream>>
using namespace std;
int* p = &i; // ポインタを i のアドレスに初期化
cout << << *p << << endl; // ポインタが指す変数の値を出力
int j = *p + 1; // ポインタが指す変数の値に +1 した値でjを初期化
cout << << j << << endl;
p = &j; // j のアドレスをポインタに設定
cout << << *p << << endl; // p は j を指す
}
=====結果=====
W:\oop02\Debug>>oop02.exe
5
6
#関数呼び出し時に、引数としてアドレスを渡す
=====例=====
#include <<iostream>>
using namespace std;
int len = sizeof(nums) / sizeof(nums[0]);
for (int i=0; i<<len; i++) { for (int j=i; j<<len; j++) {
// 引数としてアドレスを渡す
order(&nums[i], &nums[j]);
}
}
for (int i=0; i<<len; i++) { cout << << nums[i] << << endl;
}
}
int tmp;
// ポインタを間接参照する
if (*n > > *m) {
tmp = *n;
*n = *m;
}
=====結果=====
W:\oop02\Debug>>oop02.exe
2
3
ip = &i;
cp = &c;
cout << << *ip << << "," << << *cp << << endl;
vp = &i; // intポインタを 汎用ポインタに変換
int j = *reinterpret_cast<<int*>>(vp); // 汎用ポインタを intポインタに変換 cout << << j << << endl;
vp = &c; // charポインタを 汎用ポインタに変換
char d = *reinterpret_cast<<char*>>(vp); // 汎用ポインタを charポインタに変換 cout << << d << << endl;
// error C2100: 間接指定演算子 (*) の使い方が正しくありません。
// cout << << *vp << << endl; // 汎用ポインタの間接参照不可
// 'char *' から 'int *' に変換できません。
// 連続したアドレスを確保
for (int i=0; i<<SIZE; i++) { cout << << &nums[i] << << ",";
}
cout << << endl;
// 配列のベースアドレスは先頭アドレス
cout << << &nums << << endl;
// nums + 1 と &nums「1] は等しい
int* ip = nums + 1;
cout << << ip << << "=" << << *ip << << endl;
int* ip2 = &nums[1];
cout << << ip2 << << "=" << << *ip2 << << endl;
=====結果=====
int& ri = i; // i の参照
cout << << i << << "," << << *pi << << "," << << ri << << endl; cout << << "&i=" << << &i << << ", &pi=" << << &pi << << ", &ri=" << << &ri << << endl;
*pi = 9;
cout << << i << << "," << << *pi << << "," << << ri << << endl;
i = 10;
cout << << i << << "," << << *pi << << "," << << ri << << endl;
// 一旦宣言されると、別のオブジェクトの参照にはなれない
int j = 11;
ri = j;
cout << << i << << "," << << *pi << << "," << << ri << << endl;
// ポインタはアドレスを記憶した変数だが、参照はエイリアスであり同じオブジェクトを指す
cout << << "&i=" << << &i << << ", &pi=" << << &pi << << ", &ri=" << << &ri << << ", &j=" << << &j << << endl;
=====結果=====
int len = sizeof(nums) / sizeof(nums[0]);
for (int i=0; i<<len; i++) { for (int j=i; j<<len; j++) {
// 引数として値自身(参照)を渡す
ref_order(nums[i], nums[j]);
}
}
for (int i=0; i<<len; i++) { cout << << nums[i] << << endl;
}
}
int tmp;
// ポインタを間接参照する必要はない
if (n > > m) {
tmp = n;
n = m;