ポインタ演算とは? わかりやすく解説

ポインタ演算

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/04/07 19:18 UTC 版)

ポインタ (プログラミング)」の記事における「ポインタ演算」の解説

記憶域 (メモリ) のアドレス空間は、1次元空間である。たとえば32ビットシステムのアドレス空間は、16進数表記で 0x00000000 から 0xFFFFFFFF (4GiB-1) までの整数値が有効な範囲である。ポインタはこのアドレス空間抽象化しメモリ上の任意位置データオブジェクト)にアクセスするためのデータ型である。なお、プロセスアドレス空間物理メモリ上のアドレス物理アドレス)に直接対応するとは限らない通例オペレーティングシステムによって物理メモリ抽象化され、プロセスごとに仮想アドレス空間割り当てられプロセスごとの仮想アドレス空間におけるメモリ読み書き処理はOSによって物理アドレス対する処理に変換される(メモリマッピング)。 ポインタ対す算術演算は、加減算のみが許可されるポインタ加減算すると、そのポインタが指すデータ型サイズ比例したオフセットアドレス加減算されることになる。これは配列添え字演算子が、ポインタ加減算とデリファレンスの糖衣構文であることからも自明である。つまり、ある型Tへのポインタ加減算は、メモリ全体をTの配列みなしてインデックス増減していることに他ならないint* p = NULL;printf("Size of int = %d\n", (int)sizeof(int));printf("%p\n", p);p++; /* sizeof(int) * 1 だけアドレス加算される。 */printf("%p\n", p);p += 10; /* sizeof(int) * 10 だけアドレス加算される。 */printf("%p\n", p);p--; /* sizeof(int) * 1 だけアドレス減算される。 */printf("%p\n", p); バイト単位アドレッシング必要な場合char / signed char / unsigned charへのポインタ利用する。これらの型はサイズが1であることが規格保証されているため、これらの型へのポインタ対す加減算操作バイト単位アドレッシングとなる。 なお、汎用ポインタvoid*は型が不明のため、アドレス加減算行なうことができないが、GCC拡張の非標準動作ではvoid型サイズに1を割り当てるため、加減算が可能となっている。 void* pv = NULL;pv++; /* C/C++標準規格準拠した環境ではコンパイルエラーとなる。 */printf("%p\n", pv); ポインタ型サイズ処理系依存であり、通例ターゲットとするプロセッサアーキテクチャレジスタ幅と同じサイズを持つ。 オフセット計算などでポインタ間の差を得る必要がある場合定義されているptrdiff_t型を用いる。ポインタアドレス値)を整数型代入する必要がある場合定義されているポインタ互換整数型intptr_tやuintptr_tを用いる(C99およびC++11標準化されている)。なお、C/C++ではintlongなどの組み込み整数型サイズもまた処理系依存である。移植性損なうため、ポインタを扱う目的組み込み整数型直接使用してならない。 // C99 の例。#include #include #include ...int a[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };int* p1 = &a[0]; // または (a + 0)int* p2 = &a[9]; // または (a + 9)printf("p1 = %p, p2 = %p\n", p1, p2);ptrdiff_t difference = p2 - p1;printf("Difference as pointer = %td\n", difference); // 9intptr_t i1 = (intptr_t)p1;intptr_t i2 = (intptr_t)p2;printf("Difference in bytes = %jd\n", (intmax_t)(i2 - i1)); // sizeof(int) * 9

※この「ポインタ演算」の解説は、「ポインタ (プログラミング)」の解説の一部です。
「ポインタ演算」を含む「ポインタ (プログラミング)」の記事については、「ポインタ (プログラミング)」の概要を参照ください。

ウィキペディア小見出し辞書の「ポインタ演算」の項目はプログラムで機械的に意味や本文を生成しているため、不適切な項目が含まれていることもあります。ご了承くださいませ。 お問い合わせ



英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「ポインタ演算」の関連用語

ポインタ演算のお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



ポインタ演算のページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
ウィキペディアウィキペディア
Text is available under GNU Free Documentation License (GFDL).
Weblio辞書に掲載されている「ウィキペディア小見出し辞書」の記事は、Wikipediaのポインタ (プログラミング) (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。

©2025 GRAS Group, Inc.RSS