C++ ポインタ
C++ のポインタを学ぶのは簡単で面白いです。ポインタを使うことで、いくつかの C++ プログラミングタスクの実行を簡素化できます。また、動的メモリ割り当てなど、ポインタなしでは実行できないタスクもあります。したがって、優れた C++ プログラマーになるためには、ポインタを学ぶことが非常に必要です。
ご存知のように、すべての変数にはメモリ位置があります。各メモリ位置は、アンパサンド(&)演算子を使用してアクセスできるアドレスを定義しており、それはメモリ内のアドレスを表します。次の例を見てください。定義された変数のアドレスを出力します。
実例
上記のコードがコンパイルおよび実行されると、次の結果が生成されます。
var1 变量的地址: 0xbfebd5c0 var2 变量的地址: 0xbfebd5b6
上記の例を通じて、メモリアドレスとは何か、そしてそれにアクセスする方法を理解しました。次に、ポインタとは何かを見てみましょう。
ポインタとは?
ポインタは変数であり、その値は別の変数のアドレス、つまりメモリ位置の直接アドレスです。他の変数や定数と同様に、ポインタを使用して他の変数のアドレスを格納する前に、それを宣言する必要があります。ポインタ変数の宣言の一般的な形式は次のとおりです。
type *var-name;
ここで、typeはポインタの基本型であり、有効な C++ データ型でなければなりません。var-nameはポインタ変数の名前です。ポインタを宣言するために使用するアスタリスク * は、乗算で使用するアスタリスクと同じです。ただし、このステートメントでは、アスタリスクは変数がポインタであることを指定するために使用されます。以下は有効なポインタ宣言です。
int *ip; /* 一个整型的指针 */ double *dp; /* 一个 double 型的指针 */ float *fp; /* 一个浮点型的指针 */ char *ch; /* 一个字符型的指针 */
すべてのポインタの値の実際のデータ型は、整数型、浮動小数点型、文字型、その他のデータ型に関係なく、同じであり、メモリアドレスを表す長い16進数です。異なるデータ型のポインタ間の唯一の違いは、ポインタが指す変数または定数のデータ型が異なることです。
C++ でのポインタの使用
ポインタを使用するときは、次の操作を頻繁に行います:ポインタ変数を定義する、変数のアドレスをポインタに代入する、ポインタ変数内の利用可能なアドレスの値にアクセスする。これらは、単項演算子*を使用して、オペランドが指定するアドレスにある変数の値を返します。次の例はこれらの操作に関連しています。
実例
上記のコードがコンパイルおよび実行されると、次の結果が生成されます。
Value of var variable: 20 Address stored in ip variable: 0xbfc601ac Value of *ip variable: 20
C++ ポインタの詳細
C++ には、ポインタに関連する多くの概念があります。これらの概念はどれも単純ですが、すべて重要です。以下に、C++ プログラマーが明確に理解しておく必要があるポインタ関連の重要概念をいくつか示します。
| 概念 | 説明 |
|---|---|
| C++ Null ポインタ | C++ はヌルポインタをサポートしています。NULL ポインタは、標準ライブラリで定義されている値がゼロの定数です。 |
| C++ ポインタの算術演算 | ポインタに対して 4 つの算術演算(++、--、+、-)を実行できます。 |
| C++ ポインタと配列 | ポインタと配列の間には密接な関係があります。 |
| C++ ポインタ配列 | ポインタを格納するための配列を定義できます。 |
| C++ ポインタへのポインタ | C++ はポインタへのポインタを許可します。 |
| C++ 関数にポインタを渡す | 参照またはアドレスによってパラメータを渡すと、渡されたパラメータが呼び出し先関数内で変更されます。 |
| C++ 関数からポインタを返す | C++ では、関数がローカル変数、静的変数、動的メモリ割り当てへのポインタを返すことができます。 |