一位和我一起工作的实习生向我展示了他在计算机科学中参加的关于endianness问题的考试.有一个问题显示了一个ASCII字符串"My Pizza",学生必须展示这个字符串如何在一台小型endian计算机的内存中表示.当然,这听起来像一个技巧性的问题,因为ASCII字符串不受endian问题的影响.
但令人震惊的是,实习生声称他的教授坚持认为字符串将被表示为:
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上,这样我就可以让其他人来证实我说的话.
所以,我要问:谁在这里?