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 回答