我有这个代码。它打印ABBAA,我不知道为什么。它与16961的表现如何?这个号码是什么意思?
#include <stdio.h>
int main() {
short a[]={'A',16961,16706,65,16961,16706};
printf("%s\n",&((char*)a)[2]);
return 0;
}
答案 0 :(得分:1)
你有一个short
s数组(通常是2个字节长),所以让它们转换为char
s(字节)。为简单起见,我们将使用十六进制基础(因为操作字节非常方便)。
十进制16961
等于十六进制4241
(通常写为0x4241
),16706
等于4142
,65
为0041
}。 Ascii(0x41)= Ascii(65)是A
,ASCII(0x42)是B
。
&((char*)a)[2]
指向表的第三个字节,我们知道第一个打印的字符是A
。
现在让我们看看内存中可能包含的内容:
A
,B
,A
,A
,B
,NUL,{ {1}},A
,NUL,A
,A
,B
,B
,{{1 ,NUL 所以我们知道你的机器是一个小端。 A
每隔A
从第三个到第一个遇到的NUL写printf