質問: int型ポインタの加算 void foo() { int *ptrint=0; char *ptrchar=0; ptrint++; ptrchar++; } windows2000上で、上記を実行すると ptrintは4になります。 ptrcharは1になります。 なぜでしょうか。 32ビットとはいえ、 ptrintとptrcharはアドレスを示しますよね。 アドレスに1加算するのだから、 int型、char型に関係なく、 いずれも1になるべきだと思います。 int型のポインタの場合示すデータは4バイトなので、 ポインタ1加算は、4(バイト)加算になるということでしょうか。
回答: ポインタとただのアドレスの違いはまさにこの点だと思います。たとえば構造体のポインタでも同じで、+1すると構造体サイズ分アドレスが進みます。 ポインタは構造体の先頭アドレスを指すだけでなく、そのポイントした領域のサイズ(と構造)まで表します。 この辺をおさえておけば、ポインタも扱いやすくなると思います。