私と一緒に働いているインターンは、エンディアンの問題についてコンピューター サイエンスで受けた試験を見せてくれました。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」としてメモリに保存されていることを明確に示しています。1 日後、インターンが私に戻ってきて、その教授は現在、C がアドレスを自動的に変換して適切な順序で文字列を表示していると主張していると教えてくれました。
私は彼に彼の教授は正気ではないと言いましたが、これは明らかに間違っています。しかし、ここで自分の正気を確認するために、これをstackoverflowに投稿して、他の人に自分の言っていることを確認してもらうことにしました.
だから、私は尋ねます:ここにいるのは誰ですか?