C/C++のポインタ演算入門:加算・減算・インクリメント・デクリメントの使い方
C言語におけるポインタ演算とは、ポインタ変数に対して加算や減算、インクリメントなどの算術操作を実行することです。ポインタ演算には主に以下の4種類があります。
- 加算(+)
- 減算(-)
- インクリメント(+1)
- デクリメント(-1)
ポインタ演算の重要な特徴は、移動量が「指し示すデータ型のサイズ × 演算数」で計算される点です。例えば、int型(一般的な環境では4バイト)のポインタに1を加えると、アドレスは1バイトではなく4バイト進みます。さらに5を加えた場合は、4バイト × 5 = 20バイト分アドレスが移動します。
ポインタ演算のサンプルコード
以下は、C言語でポインタ演算を実行する具体的な例です。
#include<stdio.h>
int main() {
int val = 28;
int *pt;
pt = &val;
printf("Address of pointer : %u\n", pt);
pt = pt + 5;
printf("Addition to pointer : %u\n", pt);
pt = pt - 5;
printf("Subtraction from pointer : %u\n", pt);
pt = pt + 1;
printf("Increment to pointer : %u\n", pt);
pt = pt - 1;
printf("Decrement to pointer : %u\n", pt);
return 0;
}
実行結果
Address of pointer : 3938439860 Addition to pointer : 3938439880 Subtraction from pointer : 3938439860 Increment to pointer : 3938439864 Decrement to pointer : 3938439860
プログラムの解説
このプログラムでは、ポインタ変数 pt に対して各種の算術操作を適用しています。
int *pt; pt = &val;
まず int *pt; でint型へのポインタを宣言し、pt = &val; によって変数 val のアドレスを代入しています。その後に行われる操作は次の通りです。
- 加算:
pt + 5を実行すると、アドレスが20バイト(4バイト × 5)進みます。 - 減算:
pt - 5を実行すると、元のアドレスに戻ります。 - インクリメント:
pt + 1を実行すると、アドレスが4バイト進みます。 - デクリメント:
pt - 1を実行すると、再び元のアドレスへ戻ります。
実行結果を見ると、ポインタに5を加えた際にアドレスが正確に20増加していることが確認できます。これは、int型が4バイトであるためです。
ポインタ演算は、配列の要素を順番に処理する際などに頻繁に活用される重要な概念です。ただし、確保されたメモリ範囲外のアドレスにアクセスすると未定義動作を引き起こす可能性があるため、扱いには十分な注意が必要です。
-
C/C++のmemcpy()関数の使い方と実例解説
この記事では、C++ STLにおけるmemcpy()関数の動作、構文、および具体的な使用例について詳しく解説します。 memcpy()とは? memcpy()関数は、C++ STLに組み込まれた標準関数の一つで、<cstring>ヘッダーファイルで定義されています。この関数はメモリブロックをコピーするために使用され、あるメモリ位置から別のメモリ位置へ、指定されたバイト数分のデータを転送します。 関数の実行結果は、データのバイナリコピーとなります。重要な点として、memcpy()は終端のNULL文字やその他の終端記号をチェックしません。単純にソースから指定されたバイト数(num)をそ
-
C/C++で学ぶAA木(AA Tree)とは?基本概念と平衡化操作を徹底解説
AA木(AA Tree)とはコンピュータサイエンスにおいて、AA木(AA Tree)とは、順序付きデータを効率的に格納・検索するために実装された平衡木(バランスドツリー)の一種です。AA木は、赤黒木(Red-Black Tree)の変種として扱われます。赤黒木は二分探索木の一形態であり、要素の追加や削除を効率的にサポートします。赤黒木と大きく異なる点は、AA木では赤いノードを右の子としてのみ追加でき、左の子としては配置できないという制約があることです。この制約により、2-3-4木ではなく2-3木をシミュレートすることになり、その結果、木の保守操作が大幅に簡素化されます。赤黒木の平衡化アルゴリズ