今天在我的采访中有一个这样的问题。
#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 为什么?!我很困惑。请问我能帮助我吗?
答案 0 :(得分:1)
在C中,函数参数的评估顺序未指定。
下面的代码
int main()
{
printf("%d %d\n", printf("Hi\n"), printf("Hello\n"));
return 0;
}
可能会产生
Hello
Hi
3 6
或
Hi
Hello
3 6
作为输出。
你和你的面试官都不应该质疑为什么,等等。