> 文档中心 > 变量自增作为多个函数参数使用已经函数的传参顺序

变量自增作为多个函数参数使用已经函数的传参顺序


i++和++i

我们可能都已熟知这两者的区别,i++指的是先应有再自增,++i指的是先自增在应有。下面举例说明:

int main(void){int i = 10, j = 10;printf("i:%d j:%d\r\n", i++, ++j);}

以上例子输出打印是:

i:10 j:11

作为多个函数参数

void test(int a, int b, int c){printf("a:%d b:%d c:%d\r\n", a, b, c);}int main(void){int i = 10;test(i, i, i);i = 10;test(i++, i++, i++);i = 10;test(++i, ++i, ++i);i = 10;test(i++, i, ++i);}

以下为运行结果:

a:10 b:10 c:10a:12 b:11 c:10a:13 b:13 c:13a:11 b:12 c:12

以上结果的第一行没有什么疑问,第二行说明多个参数的运行顺序是从后往前的,第三行为什么3个结果都是等于13呢?结合第四行,我的总结是如果参数中有++i的操作的话,除了i++的参数都是先操作再应用。如果对此现象你有自己的看法或者比较官方的解答,欢迎评论区留言

函数的传参顺序

如果有多个参数并且带有自增或其他操作的参数时,他们之间是有顺序的:

void test(参数1, 参数2, 参数3);

如果以上3个参数都有指令操作,则先运行后面的参数3,随后参数2,最后参数1。
虽然在一个函数的多个参数中同时有两个参数都用同一个变量且其中至少一个带有指令操作的情况比较少见,但是以上例子还是更加侧重说明的点应该是函数的多个参数的情况下的传参顺序:从后往前
在这里插入图片描述