ポインタとは?ぽいんた
ポインタとは、値そのものではなく、値が置かれているメモリ上の位置を保持する変数。連結リストや木では要素どうしのつながりをこれで表すため、途中への挿入や削除が前後のつなぎ替えだけで済み、配列のように後続要素をずらす必要がない。代わりに任意の位置へ添字で直接飛ぶことはできず、先頭から順にたどることになる。
最終更新:2026-10-06
この語が出る過去問を解く →背景
配列は連続した領域をあらかじめ確保する方式で、大きさが実行中に変わるデータや、途中に頻繁に出入りがあるデータとは相性が悪い。要素を格納する場所を固定せず、位置を指す値だけを持ち回れば、実体をどこに置いてもつながりを維持できる。データ構造の計算量がなぜ配列と違うのかは、この間接参照から説明できる。
具体例
Linuxカーネルはlist_headという構造体を各データに埋め込み、前後へのポインタで双方向循環リストを作っている。要素の外し入れがポインタ2本の書き換えで済むため、割込み処理のような時間の読める処理に向く。Rustは同じ間接参照を保ちながら、解放済み領域を指すポインタの生成をコンパイル時に禁じることで、実行時の不具合を言語仕様の側で潰している。
試験での引っ掛け
つなぎ替えの順序を誤ると、まだ必要な要素へ到達できなくなり領域が回収されないまま残る。配列との比較では、添字による一発アクセスができない点と、位置を保持するぶん記憶領域を余計に使う点が問われる。要素がメモリ上に散らばるためキャッシュが効きにくく、理論上の計算量が同じでも実測で配列に負けることがある点も見落としやすい。
関連用語
出た過去問
出典:平成30年度 春期 応用情報技術者試験 午前 問26(IPA)
関係データベースのテーブルにレコードを1件追加したところ、インデックスとして使う、図のB+木のリーフノードCがノードC1とC2に分割された。ノード分割後のB+木…
正解:イ:中間ノードAからB、C1、C2、Dの4つ全てに矢印。リーフノードは B⇔C1⇔C2⇔D の順で相互連結。
要点:B+木は全リーフを親が参照し順序どおり連結する
B+木ではすべてのキーがリーフノードに置かれ、リーフ同士が順次アクセス用のポインタで連結される。リーフが分割されたときは、新しいリーフも親ノードから参照されるようポインタを追加し、リーフ間の連結もキー順を保つよう張り替える必要がある。したがって親AからB・C1・C2・Dの4つすべてへポインタがあり、リーフがB⇔C1⇔C2⇔Dの順で連結された構造が正しい。
出典:令和元年度 秋期 応用情報技術者試験 午前 問6(IPA)
先頭ポインタと末尾ポインタをもち、多くのデータがポインタでつながった単方向の線形リストの処理のうち、先頭ポインタ、末尾ポインタ又は各データのポインタをたどる回数…
正解:末尾のデータを削除する処理
要点:単方向リストの末尾削除は直前要素を探すため全体走査が要る
単方向リストではポインタが先頭から末尾の一方向にしか張られていません。末尾の要素を削除するには、直前の要素のポインタを書き換える必要がありますが、末尾ポインタからは直前へ戻れないため、先頭から順にたどって末尾の一つ前を探す必要があります。他の3つは先頭ポインタ・末尾ポインタを1〜2回たどるだけで済みます。
出典:令和2年度 10月試験 応用情報技術者試験 午前 問5(IPA)
ポインタを用いた線形リストの特徴のうち、適切なものはどれか。
正解:ポインタによって指定されている要素の後ろに、新たな要素を追加する計算量は、要素の個数や位置によらず一定である。
要点:線形リストの挿入・削除はポインタ操作だけで一定時間
ポインタで連結された線形リストは、要素の追加・削除がポインタの張り替えだけで済む。挿入位置がポインタで指定されていれば、要素数や位置に関係なく一定の手間(計算量O(1))で挿入できる。一方、任意の要素へアクセスするには先頭から順にたどる必要がある。
出典:令和2年度 10月試験 応用情報技術者試験 午前 問8(IPA)
CPUのスタックポインタが示すものとして、最も適切なものはどれか。
正解:サブルーチン呼出し時に、戻り先アドレス、レジスタの内容などを格納するメモリのアドレス
要点:スタックポインタはスタックの先頭アドレスを保持する
スタックポインタは、スタック領域の先頭(次に読み書きする位置)のアドレスを保持するレジスタである。サブルーチン呼出しや割込みの際に、戻り先アドレスやレジスタの内容を退避するのがこのスタック領域であり、その位置を示すのがスタックポインタである。
出典・参考
解説は資格暗記が独自に作成しています。過去問の出典は各問題に記載のとおりです。