April 15, 2008

[C言語]voidポインタの演算

とあるオープンソースソフトウェアのコードを読んでいたとき、voidポインタをインクリメント(ptr++;)している処理を見つけました。

Cのポインタ演算では、ポインタの型によって演算後のポインタの位置が決まります。
例えばchar型へのポインタをインクリメントすると、ポインタのアドレスは1バイト増えます。int型へのポインタのインクリメントであれば、sizeof(int)バイト分の増加になります。
じゃあ、voidポインタをインクリメントしたらどうなるのでしょうか?
voidに大きさなんて無いし。
結論から言うと(gccでは?)voidポインタをインクリメントすると1バイト増えるようです。
歴史的な理由でvoidポインタ演算はchar型へのポインタと同様に扱われるようです。ただ、Cの仕様で決まっているのか、コンパイラの実装次第なのか、突っ込んだ所までは調べられませんでした。

でもわかりにくいし、やはりキャストしてから扱う、というのが良さそうです。

matssaku at 22:38│Comments(0)TrackBack(0)clip!C 

トラックバックURL

この記事にコメントする

名前:
URL:
  情報を記憶: 評価: 顔