关于全局变量的一道c++函数题,求指点迷津。
#include<iostream>usingnamespacestd;voidfun2(chara,charb){cout<<a<<''<<b<<'';}chara='...
#include<iostream>
usingnamespace std;
voidfun2(char a,char b)
{
cout<<a<<' '<<b<<'';
}
chara='A',b='B';
voidfun1()
{
a='C';
b='D';
}
main()
{
fun1();
cout<<a<<' '<<b<<' ';
fun2('E','F');
}
程序的运行结果是____A____.
A) CD E F B) A B E F C) A B C D D) C D A B
下面做一下修改:
#include<iostream>
usingnamespace std;
void fun2(chara,charb)
{
cout<<a<<' '<<b<<' ';
}
char a='A',b='B';
void fun1(chara,charb)
{
a='C';
b='D';
}
int main()
{
fun1(a,b);
cout<<a<<' '<<b<<' ';
fun2('E','F');
}
改成这样,输出是ABEF。
能详细说一下造成这两种结果的原因吗,尤其是第一种,我对函数的一些细节还不太明白。 展开
usingnamespace std;
voidfun2(char a,char b)
{
cout<<a<<' '<<b<<'';
}
chara='A',b='B';
voidfun1()
{
a='C';
b='D';
}
main()
{
fun1();
cout<<a<<' '<<b<<' ';
fun2('E','F');
}
程序的运行结果是____A____.
A) CD E F B) A B E F C) A B C D D) C D A B
下面做一下修改:
#include<iostream>
usingnamespace std;
void fun2(chara,charb)
{
cout<<a<<' '<<b<<' ';
}
char a='A',b='B';
void fun1(chara,charb)
{
a='C';
b='D';
}
int main()
{
fun1(a,b);
cout<<a<<' '<<b<<' ';
fun2('E','F');
}
改成这样,输出是ABEF。
能详细说一下造成这两种结果的原因吗,尤其是第一种,我对函数的一些细节还不太明白。 展开
2个回答
展开全部
程序1即输出是CDEF的那个程序,属于全局变量和局部变量的问题,在函数体内如果全局和局部有冲突则优先使用局部变量,所以会输出EF
程序2 属于值传递的问题,当给函数传递参数的时候如果是值传递,则系统会分配临时空间来存储变量的值,函数运行时操作的就是临时空间里面的值,等函数结束后则释放临时空间。用这个例子来说,当给fun1传递参数的时候,系统先会吧俩个全局变量存储到俩个新的内存单元中去,然后给变量赋值的时候等于给那俩个临时空间赋值,全局变量并没有变,等函数结束的时候,全局变量仍然是A和B,只不过是临时空间里面变成了C和D,等函数结束的时候,临时空间呗释放,相当于什么都没有做。
你可以参考一下书上关于值传递和地址传递的部分知识
程序2 属于值传递的问题,当给函数传递参数的时候如果是值传递,则系统会分配临时空间来存储变量的值,函数运行时操作的就是临时空间里面的值,等函数结束后则释放临时空间。用这个例子来说,当给fun1传递参数的时候,系统先会吧俩个全局变量存储到俩个新的内存单元中去,然后给变量赋值的时候等于给那俩个临时空间赋值,全局变量并没有变,等函数结束的时候,全局变量仍然是A和B,只不过是临时空间里面变成了C和D,等函数结束的时候,临时空间呗释放,相当于什么都没有做。
你可以参考一下书上关于值传递和地址传递的部分知识
展开全部
第一题是简单的函数调用,main先调用了fun1()修改了全局变量a,b的值,所以之后先输出的是CD,然后在fun2中通过值传递给参数a、b赋值再输出EF
ps:函数内新声明的变量就算与全局变量名相同,也是新变量,这里的fun2内2个变量都是局部的a,b,而fun1内的变量没有声明,因此修改的是全局变量。
第二题是属于值传递的问题。
C/C++的函数参数传递分为地址传递和值传递2种,值传递只将值传递给参数,函数内的参数 修改对原本的实参 不做任何影响,当临时变量脱离自身的作用域时将自动销毁,所以fun1内的修改其实是无效的。最终输出的结果还是AB不变,所以结果是ABEF。
你可以找本书简单的了解下关于变量作用域、值传递和地址传递这类问题。
ps:函数内新声明的变量就算与全局变量名相同,也是新变量,这里的fun2内2个变量都是局部的a,b,而fun1内的变量没有声明,因此修改的是全局变量。
第二题是属于值传递的问题。
C/C++的函数参数传递分为地址传递和值传递2种,值传递只将值传递给参数,函数内的参数 修改对原本的实参 不做任何影响,当临时变量脱离自身的作用域时将自动销毁,所以fun1内的修改其实是无效的。最终输出的结果还是AB不变,所以结果是ABEF。
你可以找本书简单的了解下关于变量作用域、值传递和地址传递这类问题。
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询