C/C++ 参数载入问题

来源:互联网 发布:临沂seo网站推广 编辑:程序博客网 时间:2024/06/06 01:46

C/C++在载入参数的时候,是从右向左进行匹配,载入的。有时候这很重要,比如

#include <iostream>#include <iostream> #include <iomanip>  using namespace std; int main() {     int t,i,j,n;     cin>>t;     for(i=0;i<t;i++)     { int a[100]; cin>>n; for(j=0;j<n;j++) {cin>>a[j];}     int b,c,d;     cin>>b>>c>>d; int *p; int *p1,*p2; p1=&a[n/2]; p2=&a[n/2]; cout<<*(--p1)<<" "<<*(++p2)<<" "<<endl; cout<<*(p=&a[b-1])<<" "<<*(p=&a[c-1])<<" "<<*(p=&a[d-1])<<" "<<endl;}     return 0; } 


上面在ubuntu上的最后一行会输出同一个值,这是因为由于载入从右向左,所以它前面被传递的值都被覆盖了。

诡异的是这段代码在windows环境下却会是三个不同值,有可能是微软的编译器优化方式不同和linux GNU的编译器采取了不同的方式来处理这种参数载入。

有大神指点一下么?

0 0