int *pらめぇぇぇぇぇ

http://builder.japan.zdnet.com/sp/c-programming-language/story/0,3800083430,20370255,00.htm

int をポインタにしたらだめにょ

そもそもintってサイズなんだにょ?
CPUやOSにとって都合のよい整数値にょ
だからcpu や os によって変わるにょ
6502,Z80 8bit -128 〜 127
8086,68k 16bit -32768 〜 32767
i386 32bit -2147483648 〜 2147483647

ぽいんたって ++するとそのサイズ分すすむにょ

(8bit環境)
int *p;
p = 40000; // あどれすにょ

アドレス40000には適当データが詰まってると仮定にょ
      :[   p  ] (*p の値は 00000101 b [5])
40000 :00000101 00000011 00000010 00000001

p++;

 ++ でintの領域分進むにょ
      :........ [   p  ] (*p の値は 00000011 b [3])
40000 :00000101 00000011 00000010 00000001

if( *p !=3 ) throw; /* 3 = 00000011b */

/* \e; えんいー */

さて このコード
16bit環境に持っていくと throwにょ


(16bit環境)
int *p;
p = 40000; // あどれすにょ

アドレス40000には適当データが詰まってると仮定にょ
      :[       p       ] (*p の値は 00000101 00000011 b [1283])
40000 :00000101 00000011 00000010 00000001

p++;

 ++ でintの領域分進むにょ
      :........ ........ [       p       ] (*p の値は 00000010 00000001 b [513])
40000 :00000101 00000011 00000010 00000001

if( *p !=3 ) throw; /* 00000011 b [3] */

/* \e; えんいー */

さて このコード
32bit環境に持っていくと throwにょ

さて このコード
64bit環境に持っていくと throwにょ

移植するとかにはすげーめんどーなので
char __int32 __int64 とかつかえたらイイナ!!

まー
サンプルプログラムでしかint *p なんてみないけどね
じっさいは
char *p;
やら
struct HOGE *p;
やら
ほげほげでごにょごにょ