概要x86のアドレッシングの特徴でもある、「セグメント:オフセット」の形式で20ビットのアドレスをCで表現することができる。値代入やキャストも可能だが、概ねトラブルの元である。実装により様々だが、内部的には32ビット変数のように振る舞い、上位16ビットがセグメント、下位16ビットがオフセットとして機能することが多かった。この場合、sizeofすると4という結果が得られるはずである。使用例MS-DOSやWin16のCでは、ポインター変数の定義にあたり、near/far/hugeという3つの予約語が用いられた。これらはCの標準仕様には存在しないものであったが、これなくしてプログラミングが出来なかったため、やむを得ず利用された。*hp;farポインターは、このうちfarを指定したときに使われるポインターである。nearやfarを省略した場合、Cコンパイラーが自動的に判断するので必ずしも指定する必要は無いが、ポインターの種類を決め打ちしたい場合に必要となる。代入farポインターへのキャストが可能。*)np;この場合の動作は実装依存であり、結果については未定義である。殆どのCコンパイラーはセグメント拡張するが、しない可能性もある。farポインターへの即値代入も可能だが、実装依存である。いうアドレスに対するfarポインターとなる。このポインターを使えば、このアドレスに対して何かを書き込むことができる。0x00;整数型変数へのキャストfarポインターを整数型変数にキャストすることもできる。long)fp;この場合の動作は実装依存であり、結果については未定義である。演算farポインターへの演算も可能だが、これも実装依存度が高いと見込まれる。aaaa:ffff加減算はオフセット部分のみに実施される可能性が高い。演算におけるオーバーフロー/アンダーフロー時にセグメント部分に影響を与えない可能性が高い。参加の案内ダウンロード↑本の。