e172.c
計算式"+"の結果が過大




初心者の方へ。
大きすぎます。
%man limits.h
と打って下さい。
中級者の方へ。
static void difficult(void)
{
unsigned int *r_adr = (unsigned int *)0x30000000 ;
b0000000と表示されます
printf("%x¥n", r_adr -0x20000000 ) ;
10000000と表示されます
printf("%x¥n",(((char *)r_adr)-0x20000000) ) ;
}
解説:
INTポインタである事に注意。
0x30000000番地から、
0x20000000byte
引くではなく、
0x30000000番地から、
(0x20000000要素 * sizeof(unsigned int))
byte引くとなる。
詳細な説明は、
『プログラミング言語C 第2版 ANSI規格準拠
カーニハン リッチー著/石田晴久訳』
「5.4 アドレス計算」Page122
か
C-FAQJ 4.4(WEB無し、本有り)
C-FAQE 4.4
を参照して下さい。