【发布时间】:2014-04-29 06:27:50
【问题描述】:
我今天的采访中有这样一个问题。
#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 为什么?!我对此感到很困惑。请问谁能帮助我?
【问题讨论】:
-
调用约定并不暗示参数求值的顺序,只是它们通过的顺序。跨度>
-
See here 进行类似讨论。
-
不要为这家公司工作。显然,他们会给你未指定的任务来处理......
-
+1 表示 fritzone 的建议。未指定的任务。
标签: c printf calling-convention cdecl