C++ ポインター


C++ でポインタを学ぶのは簡単で楽しいです。ポインタを使用すると、一部の C++ プログラミング タスクの実行が簡素化されます。また、動的メモリ割り当てなどの一部のタスクは、ポインタなしでは実行できません。したがって、優れた C++ プログラマになりたい場合は、ポインタを学ぶ必要があります。

ご存知のとおり、すべての変数にはメモリ位置があり、各メモリ位置はメモリ内のアドレスを表すハイフン (&) 演算子を使用してアクセスできるアドレスを定義します。次の例を参照してください。定義された変数アドレスが出力されます:

#include <iostream>

using namespace std;

int main ()
{
   int  var1;
   char var2[10];

   cout << "var1 变量的地址: ";
   cout << &var1 << endl;

   cout << "var2 变量的地址: ";
   cout << &var2 << endl;

   return 0;
}

上記のコードをコンパイルして実行すると、次の結果が生成されます:

var1 变量的地址: 0xbfebd5c0
var2 变量的地址: 0xbfebd5b6

上記の例を通じて、メモリ アドレスとは何か、またその方法を理解しました。アクセスしてください。次に、ポインターとは何かを見てみましょう。

ポインタとは何ですか?

ポインタは、その値が別の変数のアドレス、つまりメモリ位置の直接アドレスである変数です。他の変数や定数と同様に、ポインターを使用して別の変数のアドレスを格納する前に、ポインターを宣言する必要があります。ポインター変数宣言の一般的な形式は次のとおりです。

type *var-name;

ここで、type はポインターの基本型であり、有効な C++ データ型である必要があり、var-name はポインター変数の名前です。ポインターの宣言に使用されるアスタリスク * は、乗算で使用されるものと同じです。ただし、このステートメントでは、変数がポインターであることを指定するためにアスタリスクが使用されています。以下は有効なポインタ宣言です:

int    *ip;    /* 一个整型的指针 */
double *dp;    /* 一个 double 型的指针 */
float  *fp;    /* 一个浮点型的指针 */
char   *ch     /* 一个字符型的指针 */

すべてのポインタ値の実際のデータ型は、整数、浮動小数点、文字、その他のデータ型であっても同じであり、16 進数のメモリ アドレスを表す long 値です。番号。異なるデータ型のポインター間の唯一の違いは、ポインターが指す変数または定数のデータ型です。

C++ でのポインターの使用

ポインターを使用する場合、ポインター変数の定義、変数アドレスのポインターへの割り当て、ポインター変数で使用可能なアドレスの値へのアクセスという操作が頻繁に実行されます。これらは、単項演算子 * を使用して、オペランドで指定されたアドレスにある変数の値を返すことによって行われます。次の例には、これらの操作が含まれています:

#include <iostream>

using namespace std;

int main ()
{
   int  var = 20;   // 实际变量的声明
   int  *ip;        // 指针变量的声明

   ip = &var;       // 在指针变量中存储 var 的地址

   cout << "Value of var variable: ";
   cout << var << endl;

   // 输出在指针变量中存储的地址
   cout << "Address stored in ip variable: ";
   cout << ip << endl;

   // 访问指针中地址的值
   cout << "Value of *ip variable: ";
   cout << *ip << endl;

   return 0;
}

上記のコードがコンパイルされて実行されると、次の結果が生成されます:

Value of var variable: 20
Address stored in ip variable: 0xbfc601ac
Value of *ip variable: 20

C++ ポインターの詳細な説明

C++ には、ポインター関連の概念が多数あります。シンプルですが重要です。以下に、C++ プログラマーが知っておく必要があるポインター関連の重要な概念をいくつか示します。

概念説明
C++ Null ポインターC++ は Null ポインターをサポートします。 NULL ポインタは、標準ライブラリで定義されている値 0 の定数です。
C++ ポインター算術演算ポインターに対して 4 つの算術演算を実行できます: ++、--、+、-
C++ ポインターと配列 ポインターと配列の間には密接な関係があります。
C++ ポインター配列 ポインターを格納するために使用される配列を定義できます。
C++ ポインターからポインターへのポインターC++ ではポインターからポインターへのポインターが可能です。
C++ 関数へのポインターの受け渡し パラメーターを参照またはアドレスで渡し、渡されたパラメーターが呼び出し元の関数内で変更されるようにします。
C++ 関数からポインターを返す C++ では、関数がローカル変数、静的変数、および動的メモリ割り当てへのポインターを返すことができます。