【发布时间】:2017-03-21 19:59:47
【问题描述】:
这是在考试中作为过去的问题给出的,但我无法理解最后 4 个 printf 函数获得的结果。我将前 2 个转换为十六进制,但我并没有真正看到
处的字符ptr[0] to ptr[3]
这是编译和运行的代码部分。
int main(int argc, char *argv[]){
typedef unsigned char byte;
unsigned int nines = 999;
byte * ptr = (byte *) &nines;
printf ("%x\n",nines);
printf ("%x\n",nines * 0x10);
printf ("%d\n",ptr[0]);
printf ("%d\n",ptr[1]);
printf ("%d\n",ptr[2]);
printf ("%d\n",ptr[3]);
return EXIT_SUCCESS;
}
这是相应的输出
3e7
3e70
231
3
0
0
【问题讨论】:
-
提示:写下
999的二进制表示,考虑到unsigned int变量很可能占用4 个字节。 -
将那些
%d更改为%x并再次运行它。它应该更加清晰。 -
@SingerOfTheFall 最重要的部分是
most likely,它取决于架构,那么这个问题无法正确回答 -
999 = 231 * 2^0 + 3 * 2^8 + 0 * 2^16 + 0 * 2^24
-
此发布的代码无法编译。分析表明它缺少两个语句:
#include <stdio.h>和#include <stdlib.h>编译器还输出有关未使用变量argc和argv[]的警告当不使用这些参数时,使用签名int main( void )。当问一个运行时问题(因为这个问题)时,请发布 1)干净编译的代码,2)实际输入,如果有的话 3)实际输出和 4)预期输出。