2、 32 位機上根據下面的代碼,問哪些說法是正確的? signed char a = 0xe0; unsigned int b = a; unsigned char c = a; A. a>0 && c>0 爲真 B. a == c 爲真 C. b 的十六進制表示是:0xffffffe0 D. 上面都不對
A: 分析 a>0, 首先進類型提高,將signed char 提高爲signed int,值爲0xffffffe0,是負數,因此a>0錯誤。分析c>0,首先進類型提高,將unsigned char 提高爲signed int,值爲0x000000e0,是正數,因此c>0正確 B: 通過A的分析,可知B錯誤 C: 首先對a進行類型提高,將signed char 提高爲signed int,值爲0xffffffe0,而後將其賦值給unsigned int b,因此C正確
3、 int a[10]; 問下面哪些不能夠表示 a[1] 的地址? A. a+sizeof(int) B. &a[0]+1 C. (int*)&a+1 D. (int*)((char*)&a+sizeof(int))
A: 數組名a至關於一個整型指針,只是至關於而已,二者之間不能劃等號。這裏把a看作一個整型指針int *p,它指向數組的第一個元素,a+4則指向了a[4] B:能夠表示a[1] C: (int*)&a +1; &a是指向數組的指針,即 int (*p)[10],那麼&a+1,表示的a是a[9]以後的地址;(int *)&a則又變成了指向一個整型的指針,即指向了a[0] D:參考C的分析