1

今日のインタビューでそのような質問があります。

#include <stdio.h>

int main(void) 
{
    char *s="123456790";
    printf("%c,%c",*(char *)((int *)s+++1),*s);
    return 0;
}

私の答えは 5.1 ですが、インタビュアーは 5.2 だと言いました。もちろん、C のデフォルトの呼び出し規約は __cdecl で、引数の受け渡し順序は右から左であることは知っていたので、そのことを彼に伝えました。しかし、彼はそれを信じませんでした。VS2013で実行するより。それは5,2を示しました!!!!!

さて、家に帰って、ideone でもう一度試してみます。答えは 5.1 です!!! http://ideone.com/sq6yRE なぜ?! 私はそれについてとても混乱しています。誰が私を助けてくれますか?

4

1 に答える 1

1

C では、関数の引数の評価順序は規定されていません。

以下に書かれたコード

int main()
{
  printf("%d %d\n", printf("Hi\n"), printf("Hello\n"));
  return 0;
}

どちらかを生成する可能性があります

Hello
Hi
3 6

また

Hi
Hello
3 6

出力として。

そして、あなたも面接官も、なぜ、どのようになどを質問するべきではありません。

于 2014-04-29T06:44:44.540 に答える