C++の基礎:ポインタの算術演算を学ぶ

提供: Support
移動先: 案内検索

概要

別の記事「C++の基礎:ポインタと変数のメモリアドレスの使い方を学ぶ」でポインタは整数値で、あるアドレスを指す変数であることを学びました。つまり、ポインタ変数で算術演算ができるということです。しかし、忘れてはならないのは、私たちはRAM上のアドレスに対して演算を行うので、注意が必要であり、その範囲をよく知っておく必要があるということです。簡単に言うと、ポインタには++、-、+、-などの算術演算子を使用できます。


32ビットのアプリケーションでは、ポインタは32ビットのアドレスを持ちます。つまり、ポインタの増加は、アドレスを32ビット(4バイト)分増加させることを意味し、同様にポインタの減少は、アドレスを32ビット(4バイト)分減少させることを意味します。64ビットアプリケーションでは、 ポインタは64ビットのアドレスを持ち、8バイトの順方向または逆方向のアドレス移動になります。


以下のコード例は、これを簡単に理解するのに役立ちます。

int params[10];  // array with 10 integers, indexes are 0 to 10
param[0]=100;
param[1]=101;
 
int *p = &params[0];
cout << "Address stored in pointer p: " <<  p << '\n';
cout << "Value of pointer variable  : " << *p << '\n';
 
p++; // address increment
cout << "Address stored in pointer p: " <<  p << '\n';
cout << "Value of pointer variable  : " << *p << '\n';
 
p--; // address decrement 
cout << "Address stored in pointer p: " <<  p << '\n';
cout << "Value of pointer variable: "   << *p << '\n';

ポインタの比較

ポインタは、メモリ上のアドレスを指し示す整数値で、'==', '<', '>'などの関係演算子を用いて、整数値として比較することもできます。2つのポインタが同じアドレスを指しているかどうかを確認するには、以下の例を参照してください。

int params[10];  // array with 10 integers, indexes are 0 to 10
int *p1 = &params;
int *p2 = &params[0];
 
if (p1==p2) std::cout << "they point the same address\n";

比較演算子の'<' と ’>’は、上記のように配列ポインタで使用できます。

関連情報