配列対C ++のポインタ
ポインタと配列は密接に関連しています。 実際には、多くの場合、ポインタと配列には互換性があります。 例えば、配列の先頭へのポインタは、アレイは、ポインタ演算または配列インデックスを使用してアクセスすることができます。 次のプログラムを考えてみましょう。
#include <iostream> using namespace std; const int MAX = 3; int main () { int var[MAX] = {10, 100, 200}; int *ptr; // 指针中的数组地址 ptr = var; for (int i = 0; i < MAX; i++) { cout << "Address of var[" << i << "] = "; cout << ptr << endl; cout << "Value of var[" << i << "] = "; cout << *ptr << endl; // 移动到下一个位置 ptr++; } return 0; }
上記のコードはコンパイルされ、実行されると、次の結果を生成します。
Address of var[0] = 0xbfa088b0 Value of var[0] = 10 Address of var[1] = 0xbfa088b4 Value of var[1] = 100 Address of var[2] = 0xbfa088b8 Value of var[2] = 200
しかし、ポインタと配列は、完全に互換性がありません。 たとえば、次のプログラムを考えてみます。
#include <iostream> using namespace std; const int MAX = 3; int main () { int var[MAX] = {10, 100, 200}; for (int i = 0; i < MAX; i++) { *var = i; // 这是正确的语法 var++; // 这是不正确的 } return 0; }
ポインタ演算子*は、VARに適用されて完全に許容ですが、変更するvar値が不正です。 これは、varが配列定数の先頭へのポインタであるので、それは左の値として使用することはできませんです。
配列名はポインタ定数に対応しているので、彼らは、配列の値を変更しないでください、あなたはまだ、式のポインタのフォームを使用することができます。 例えば、以下は有効な文、VAR [2] 500割り当ては次のとおりです。
*(var + 2) = 500;
VAR変わらないため、上記の文は、有効であり、正常にコンパイルすることができます。