最近在思考一个奇怪的问题:函数在传参的时候分先后吗?
C语言的执行是按顺序的,按理说两个表达式用逗号隔开以后,先执行逗号前的,再执行逗号以后的。
于是做了个实验:
#include <stdio.h>
int main(void)
{
char *p;
p = "123456";
printf("%c %c\n", *p++, *p);
printf("%c %c\n", *p++, *p);
return 0;
}
执行结果是:
1 1
2 2
第二行printf的p被第一行printf中的++影响了,变成了2,这我理解。
但同一行内,printf传入p的顺序如果有先后,第二个p就不会和第一个p相等。出现这样的情况,说明两个p是同时传入printf并成为副本的,但这不是违背了顺序执行的常识么?有没有人能解答这个问题?