一道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;这是为什么??
展开
 我来答
yao14yao14
2013-07-24 · TA获得超过2612个赞
知道小有建树答主
回答量:959
采纳率:50%
帮助的人:330万
展开全部
当你将 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
学生阿成
2013-07-24 · TA获得超过2073个赞
知道小有建树答主
回答量:1070
采纳率:0%
帮助的人:680万
展开全部
你要理解变量的可影响范围.
首先:
你是定义了外部变量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!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zljk0306
2013-07-24 · TA获得超过366个赞
知道小有建树答主
回答量:229
采纳率:90%
帮助的人:206万
展开全部
同学,你好;这里考察的是变量的作用域。
你在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();
        }
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
梦魇六月
2013-07-24 · 超过51用户采纳过TA的回答
知道小有建树答主
回答量:117
采纳率:0%
帮助的人:127万
展开全部
第一个输出应该是5,10 ,10
第二个是因为你相当于重新定义了一个val 非static对象,这俩是不冲突的, static读的是你外面那个static val变量。而那个是默认0的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Neludo
2013-07-24 · 超过10用户采纳过TA的回答
知道答主
回答量:86
采纳率:0%
帮助的人:33万
展开全部
相当于重新定义了 val
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式