c语言的题目,第十八题怎么做

如题所述

这道题的答案 应等于 0xffc2 + 9 * sizeof(int);
声明了 int 型指针*p, 初始化 *p=a; 也就是指向了 a数组的始地址 &a[0];
printf("%x\n",p); 按16进制输出了 &a[0];
printf("%x\n",p+9); 按16进制输出了 &a[0] + 9 * sizeof(int);
古老的计算机, int 型 被处理成 short int, 字长2字节,0xffc2 + 9 * sizeof(int) = 0xffc2 +18 = 0xffd4, 答案 为 B. ffd4.
MS VC++ 和 现在的大部分 计算机 int 型 被处理成 long int, 字长4字节, 输出应为0xffc2+36 = ffe6,那么待选的4个答案中 没有一个 可选啦。追问

谢谢!懂了!但是最佳答案给错了。。没给你

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-10-16
从题目提供的答案来看,该系统采用的是16位编译器,第个int占用2字节。所以,9个int占用18个字节,其16进制表示为12h
所以,ffc2h+12h=ffd4h
选择答案B追问

为什么占用18个字节就要加12h,他不是p+9吗,地址加九。。

追答

这是因为它输出的是地址,而每个元素占用2个字节。所以a[9]的地址就是&a[0]+18=&a[0]+12h

追问

谢谢

相似回答