这个简短代码是什么意思?

时间:2015-02-05 13:20:17

标签: c string printf

我有这个代码。它打印ABBAA,我不知道为什么。它与16961的表现如何?这个号码是什么意思?

#include <stdio.h>
int main() {
short a[]={'A',16961,16706,65,16961,16706};
printf("%s\n",&((char*)a)[2]);
return 0;
}

1 个答案:

答案 0 :(得分:1)

你有一个short s数组(通常是2个字节长),所以让它们转换为char s(字节)。为简单起见,我们将使用十六进制基础(因为操作字节非常方便)。

十进制16961等于十六进制4241(通常写为0x4241),16706等于4142650041 }。 Ascii(0x41)= Ascii(65)是A,ASCII(0x42)是B&((char*)a)[2]指向表的第三个字节,我们知道第一个打印的字符是A

现在让我们看看内存中可能包含的内容:

  • 如果您的计算机是大端模型,您将拥有字节NUL,ABAAB,NUL,{ {1}},
  • 如果您的计算机是一个小端,您将拥有A,NUL,AABB,{{1 ,NUL

所以我们知道你的机器是一个小端。 A每隔A从第三个到第一个遇到的NUL写printf