一道C#程序题!十分关键,望各位大侠帮忙!!
classProgram{staticintval;staticvoidMain(string[]args){val=5;///这地方注意!!!!Console.Writ...
class Program
{
static int val;
static void Main(string[] args)
{
val = 5;///这地方注意!!!!
Console.WriteLine("val={0}", val);
showdouble();
Console.WriteLine("val={0}", val);
Console.ReadKey();
}
static void showdouble()
{
val *= 2;
Console.WriteLine("val doubled={0}", val);
}
请看这道题,此程序的输出结果是5, 10, 5
但是如果我把 val=5替换成 int val=5的时候,结果显示为;5, 0, 5;这是为什么?? 展开
{
static int val;
static void Main(string[] args)
{
val = 5;///这地方注意!!!!
Console.WriteLine("val={0}", val);
showdouble();
Console.WriteLine("val={0}", val);
Console.ReadKey();
}
static void showdouble()
{
val *= 2;
Console.WriteLine("val doubled={0}", val);
}
请看这道题,此程序的输出结果是5, 10, 5
但是如果我把 val=5替换成 int val=5的时候,结果显示为;5, 0, 5;这是为什么?? 展开
5个回答
展开全部
当你将 val = 5 替换成 int val = 5后,即你在 Main 方法内声明了一个局部变量 val,这样输出的就是局部变量 val,而不是全局变量 val,,不过在 shoudouble() 方法内的 val*=2 依然调用的是全局变量 val(未赋值默认为0)
追问
还想问下,为什么编写val=5时 showdouble()的值就为10了呢??麻烦您了
追答
val=5 表示给全局静态变量 val 赋值为 5,,这样在 showdouble() 中调用的变量 val 值就是5,与2相乘就是10
展开全部
你要理解变量的可影响范围.
首先:
你是定义了外部变量Int val; 此时外部的val默认为0;
而你在里面如果又定义了int val=5; 这里是没有改变外部的val的值的,此时它的值还为0 ;
所以你showdouble()函数,取得的val是外部的val并不是你在Main里面int定义的5....
所以,,你在val*=2时,想0*2,当然还等于0.
首先:
你是定义了外部变量Int val; 此时外部的val默认为0;
而你在里面如果又定义了int val=5; 这里是没有改变外部的val的值的,此时它的值还为0 ;
所以你showdouble()函数,取得的val是外部的val并不是你在Main里面int定义的5....
所以,,你在val*=2时,想0*2,当然还等于0.
追问
还想问下,为什么编写val=5时 showdouble()的值就为10了呢??麻烦您了
追答
你写val=5时,就是改变了,全局变量(外部变量)val的值,它从默认的0改为了5,所以,你在ShowDouble的时候,输出的是10!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
同学,你好;这里考察的是变量的作用域。
你在Program定义了static int val;这个val的作用域是整个Program。
所以第一次运行结果输出5,10,10;不是你说的5,10,5
然而,当你将 val = 5;///这地方注意!!!!改为:int val=5时,此时的val是局部变量,它只在 static void Main(string[] args)中起作用,这个val和你定义的 static int val只是名字相同而已,内存地址不同,说白了它们是两个不同的变量!
所以第一个和第三个输出都是局部变量val的值,是5;
第二个输出是这个静态的变量static int val;它的初始值为0,乘以2之后自然也为0.
希望能帮到你
追问
还想再麻烦你一下,如果编写val=5的时候,为什么输出结果就为5,10,10了呢?
追答
好的。 static int val;这个val初始值是0。
在执行到 static void Main(string[] args)
{
val = 5;///这地方注意!!!!
现在的值是5了。
Console.WriteLine("val={0}", val);此处输出5.
showdouble();//此处调用showdouble方法,你在这个方法中改变了val的值,
//static void showdouble()
//{
// val *= 2;此处val变成了10。
// Console.WriteLine("val doubled={0}", val);输出10
// 因为val的作用域是在整个Program内有效,所以它的值就是10了
//}
//
Console.WriteLine("val={0}", val);//此处输出10,你应该能明白了吧?
Console.ReadKey();
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
第一个输出应该是5,10 ,10
第二个是因为你相当于重新定义了一个val 非static对象,这俩是不冲突的, static读的是你外面那个static val变量。而那个是默认0的
第二个是因为你相当于重新定义了一个val 非static对象,这俩是不冲突的, static读的是你外面那个static val变量。而那个是默认0的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
相当于重新定义了 val
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询