f(A,B,C);
在编译程序中,对函数参数传递的处理是由右向左进行的。
因此,先传递的是最右边的参数的值。这个结论在日常使用的时候其实也很难发现有什么具体的区别,但是在编译原理中或者一些偏向于理论的考试中这恰恰是最容易忽视的地方。
下面简单举例说明:
测试程序:
#include<iostream>
#include<bits/stdc++.h>
using namespace std;int fun(int x,int y);
int main()
{int i=1;cout<<fun(i,++i)<<endl;return 0;
}int fun(int x,int y)
{return x+y;
}
在查看运行结果前可以自己猜一下运行结果的数值。
运行结果:
先传递二参,即i先进行自增,这是函数两个实参都变为了2,所以结果是4。
转换一下顺序再次进行比较:
#include<iostream>
#include<bits/stdc++.h>
using namespace std;int fun(int x,int y);
int main()
{int i=1;cout<<fun(i,i++)<<endl;return 0;
}int fun(int x,int y)
{return x+y;
}
运行结果:3
这里先传二参,但是先传后增,所以在到一参的时候值还是1,传完后二参变2,所以结果为3.
用到的地方不多,但是在写C的编译器的时候关于这些语法需要注意一些。
这里也需要注意后增是在一次传值之后就会执行自增。前增是在进行一次传值前进行传值。
我觉得慢慢来,是一种诚意。