これまでと同じ方法でポインタを宣言するには、ポイント先に名前つきの変数を用意して、ポインタを使用します。
int value; int *value_ptr; value_ptr = &value;
この場合のvalue_ptrは、valueへのポインタです。
言い換えれば、ポインタ(value_ptr)がポイントする先には名前(value)がちゃんと付いています。
演算子newを使うことで、ポイントする先に変数の名前がついていないポインタを作成できます。
ポイント先の変数の名前がないので、ポイント先を参照する際には、ポインタでしか参照できません。
演算子newは、実際にはヒープというメモリ領域からメモリを割り当てます。
new演算子は、割り当てるべきバイト数を自動で計算する、動的なメモリ割り当てとなります。
メモリ不足で領域を確保できなかった場合は、NULLポインタ(古いC++)、または例外を返します。
#include <iostream>
int main() {
int value = 5;
int *value_ptr;
value_ptr = &value;
std::cout << "value: " << value << "\n";
std::cout << "*value_ptr: " << *value_ptr << "\n\n";
std::cout << "new演算子の場合:" << "\n";
int *data_ptr; // 整数へのポインタ
data_ptr = new int; // ヒープ領域に整数を割り当てる
std::cout << "ポインタ自身: " << data_ptr << "\n"; // アドレス
std::cout << "ポインタの逆参照: " << *data_ptr << "\n"; // 名前のない変数
return 0;
}
演算子newは、割り当てるデータの型を、1つの引数としてとります。
実行結果。
value: 5 *value_ptr: 5 new演算子の場合: ポインタ自身: 00426C98 ポインタの逆参照: -842150451
■この記事のトラックバックURL:
http://www.mapee.jp/mpe334/mt-tb.cgi/275