一位和我一起工作的实习生向我展示了他参加的关于字节顺序问题的计算机科学考试。有一个问题显示了一个 ASCII 字符串“My-Pizza”,学生必须展示该字符串如何在小端计算机的内存中表示。当然,这听起来像是一个技巧问题,因为 ASCII 字符串不受字节序问题的影响。
但令人震惊的是,实习生声称他的教授坚持认为该字符串将表示为:
P-yM azzi
我知道这不可能。在任何机器上都无法像这样表示 ASCII 字符串。但显然,教授在坚持这一点。所以,我写了一个小 C 程序并告诉实习生把它交给他的教授。
#include <string.h>
#include <stdio.h>
int main()
{
const char* s = "My-Pizza";
size_t length = strlen(s);
for (const char* it = s; it < s + length; ++it) {
printf("%p : %c\n", it, *it);
}
}
这清楚地表明该字符串在内存中存储为“My-Pizza”。一天后,实习生回复我,告诉我教授现在声称 C 正在自动转换地址以以正确的顺序显示字符串。
我告诉他他的教授疯了,这显然是错误的。但只是为了检查我自己的理智,我决定将其发布在 stackoverflow 上,以便让其他人确认我在说什么。
所以,我问:谁在这里?