| ページ一覧 | ブログ | twitter |  書式 | 書式(表) |

MyMemoWiki

差分

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

案内メニュー