Cplusplus-cpp-pointers-vs-arrays
提供:Dev Guides
C ++ポインターと配列
ポインターと配列は強く関連しています。 実際、多くの場合、ポインターと配列は交換可能です。 たとえば、配列の先頭を指すポインターは、ポインター演算または配列スタイルのインデックス作成を使用して、その配列にアクセスできます。 次のプログラムを検討してください-
#include <iostream>
using namespace std;
const int MAX = 3;
int main () {
int var[MAX] = {10, 100, 200};
int *ptr;
//let us have array address in pointer.
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;
//point to the next location
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; //This is a correct syntax
var++; //This is incorrect.
}
return 0;
}
ポインター演算子*をvarに適用することは完全に許容できますが、var値を変更することは違法です。 これは、varが配列の先頭を指す定数であり、l値として使用できないためです。
配列名はポインター定数を生成するため、変更しない限り、ポインター形式の式で使用できます。 たとえば、次は、var [2]に値500を割り当てる有効なステートメントです-
*(var + 2) = 500;
上記のステートメントは有効であり、varが変更されていないため、正常にコンパイルされます。