Humanity

Edit the world by your favorite way

void*に対して加減算をすると何Byte進むのか

答え:
1Byte。
コンパイルエラー(gcc以外では)。

(コメント欄にてid:pi8027さんにvoid*に対して加算できるのはgcc拡張だと教えていただきました。詳しくはid:pi8027さんのコメント欄のURLを参照してください)


歴史的な理由があるらしくて、char*と同じになってるらしい。
(追記:歴史的な理由についてはid:hito_hppさんのコメント欄参照。
あと「char*と同じになってる(1Byte進むようになってる)」んじゃなくて、以下はただvoid*を一般化したポインタとして使用できるってだけの話(多分)。
文中にはvoid*ポインタへの加減算の話は含まれていなかった)


プログラミング言語C 第2版の「ポインタと配列」(p.113)の冒頭にも

さてANSI Cでの主な変更点は、ポインタの扱い方に関する規則を明確にしたことである。
...
さらに、型void*(voidへのポインタ)を、char*の代わりに一般化されたポインタとして使用することができる。

とか書いてあった。
char*をvoid*の代わりに使っていた背景でもあったんだろうか?
誰か事情を知っている方がいらっしゃったら教えてください...