C ++ポインタ演算
ポインタは、数値表現のアドレスです。 したがって、あなたはポインタに対して算術演算を実行することができます。 ポインタは、4-演算することができます:+、 - 、+、 - 。
ptrが整数ポインタアドレス1000年へのポインタであると仮定し、以下を実行するためにポインタ演算を聞かせて、32ビットの整数であります:
ptr++
上記の操作を行った後、ptrは各追加の時間ptrを、現在の位置が戻って4バイトを移動したことを次の整数位置を指すようになりますので、1004を配置する点。 この操作の場合には、メモリ位置の実際の値には影響しません、次のメモリ位置にポインタを移動します。 1000文字のアドレスを指しPTR場合は、上記の動作は、次の文字位置のため1001年には、1001の位置へのポインタが発生します。
ポインタをインクリメント
私たちは、変数のポインタがインクリメントされているため、プログラム内のポインタの代わりに配列を使用するように、配列は定数ポインタであるため、アレイは、増やすことはできません。 次のプログラムは、配列内のアクセスに各要素を順番に変数のポインタをインクリメント:
#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}; int *ptr; // 指针中最后一个元素的地址 ptr = &var[MAX-1]; for (int i = MAX; i > 0; i--) { cout << "Address of var[" << i << "] = "; cout << ptr << endl; cout << "Value of var[" << i << "] = "; cout << *ptr << endl; // 移动到下一个位置 ptr--; } return 0; }
上記のコードはコンパイルされ、実行されると、次の結果を生成します。
Address of var[3] = 0xbfdb70f8 Value of var[3] = 200 Address of var[2] = 0xbfdb70f4 Value of var[2] = 100 Address of var[1] = 0xbfdb70f0 Value of var[1] = 10
ポインタを比較
ポインタは、==、<と>のような演算子の関係を比較するために使用することができます。 そのような様々な要素のアレイを有するような2つの関連する変数のP1およびP2点場合は、比較P1、P2のサイズとすることができます。
次の手順では、[MAX - 1]限り、変数のポインタの最後の要素のアドレスが配列のアドレスは、VARを、&以下であるされているように、上記の例を変更し、ポインタ変数がインクリメントされる置きます:
#include <iostream> using namespace std; const int MAX = 3; int main () { int var[MAX] = {10, 100, 200}; int *ptr; // 指针中第一个元素的地址 ptr = var; int i = 0; while ( ptr <= &var[MAX - 1] ) { cout << "Address of var[" << i << "] = "; cout << ptr << endl; cout << "Value of var[" << i << "] = "; cout << *ptr << endl; // 指向上一个位置 ptr++; i++; } return 0; }
上記のコードはコンパイルされ、実行されると、次の結果を生成します。
Address of var[0] = 0xbfce42d0 Value of var[0] = 10 Address of var[1] = 0xbfce42d4 Value of var[1] = 100 Address of var[2] = 0xbfce42d8 Value of var[2] = 200