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 アドレス計算」Page122C-FAQJ 4.4(WEB無し、本有り) C-FAQE 4.4 を参照して下さい。