C++对于变量的生存周期以及参数传递方式的不解
#include <iostream>using namespace std;int x;void funA(int &,int );void funB(int ,int &);void main(){ int first; int second=5; x=6;//初始化全局变量 //int x=6;//重新定义变量x funA(first,second); cout<<first<<" "<<second<<" "<<x<<endl; funB(first,second); cout<<first<<" "<<second<<" "<<x<<endl;//只初始化全局变量x的值为什么不按照引用或者指针的方式传递,也能改变x在函数外面的值。 //cout<<first<<" "<<second<<" "<<x<<endl;//如果重新定义变量x,x值没有被改变。这是为什么?}/*void main()//第二种方式{ int first; int second=5; x=6;//初始化全局变量 funA(first,second); cout<<first<<" "<<second<<" "<<x<<endl; { int x=9; funB(first,second); cout<<first<<" "<<second<<" "<<x<<endl;//这里既然x值为9 } cout<<x<<endl;//那么这里为什么x值又变成20了?}*/void funA(int &a,int b){ int first; first=b+12; a=2*b; b=first+4;}void funB(int u,int &v){ int second; second=x; v=second+4; x=u+v;//x的值被改变。}#include <iostream>using namespace std;int x;void funA(int &,int );void funB(int ,int &);void main(){ int first; int second=5; x=6;//初始化全局变量 //int x=6;//重新定义变量x funA(first,second); cout<<first<<" "<<second<<" "<<x<<endl; funB(first,second); cout<<first<<" "<<second<<" "<<x<<endl;//之所以能修改是因为X作用域为全局。使用指针或者引用的目的就是为了延长某些局部变量的作用域(暂且这么理解). //cout<<first<<" "<<second<<" "<<x<<endl;//局部同名变量会屏蔽掉全局同名变量。}/*void main()//第二种方式{ int first; int second=5; x=6;//初始化全局变量 funA(first,second); cout<<first<<" "<<second<<" "<<x<<endl; { int x=9;//这里的x作用域仅限于此{},由于funB并未做x的值传递,故此{}中输出x为9 funB(first,second); cout<<first<<" "<<second<<" "<<x<<endl;//这里的X是属于本段的x 即9. }//到此,上面定义的 int x=9;作用域已消失。 cout<<x<<endl;//这里x为全局定义x,在funB中进行了修改为20.}*/void funA(int &a,int b){ int first; first=b+12; a=2*b; b=first+4;}void funB(int u,int &v){ int second; second=x; v=second+4; x=u+v;//由于funB并未有x的值传递,故此中x为全局的x}