C++计算机二级选择题

#include<iostream>
using namespace std;
int main()
{ void function(double val);
double val;
function(val);
cout<<val;
return 0; }
void function(double val)
{ val=3; }
A)编译出错,无法运行
B)输出:3
C)输出:3.0
D)输出一个不确定的数
为什么不是A呢?main函数里void function(double val)
这句话本身不是错的吗?val不是只定义了double型而没有值么。。求大神解答,谢谢!

第1个回答  2015-06-25
1、c++函数是按值传递的。main中val并没有赋值,所以值不确定。调用函数function时传入val,由于c++函数是按值传递,所以到function里面的val变量其实是main函数val的一个副本而已,function里面val的值如何改变也不会改变main中val的值。因此答案应该是D
2、void function(double val);是函数的声明。C++中函数定义位于使用函数后面的话需要在使用函数开头先声明函数。function函数的定义在main后面,所以需要在main中先声明function函数追问

main()
{double val;
这个时候系统是不是随机为val赋值了呢?

追答

是,所以输出也是随机的,不确定

第2个回答  2015-06-25
void function(double val);是函数声明,val可要可不要,如果要的话,就要跟实现函数的函数头一致
第3个回答  推荐于2016-05-10
main函数里void function(double val)是声明一个局部函数,就是说该函数只能在main函数中调用;没有错。括号中的double val是形参,val是形参名,在这里可以省略,即声明为:void function(double)。main中声明double val;val是一个变量但没有赋值,所以是一个不确定的数;后面的 function(val);是用变量val作为实参调用函数;由于参数传递是单向的,即调用函数时把一个不确定的数val传给形参val(两个val在内存不同的地方,只是同名而已,因为作用域不同,允许同名),在函数中修改形参val为3,但实参val(即main函数中的变量val并不会改变,这就是参数传递是单向的),因此,输出val时任然是一个不确定的数。追问

main()
{double val;
这个时候系统是不是随机为val赋值了呢?

追答

不是随机赋值,声明double val;后,编译器只是给分配了相应的内存,内存中原来是什么就是什么,就像你给你分配一个房间,房间里有什么你不确定,你进去后随你布置(相当于赋值)

本回答被提问者和网友采纳
相似回答