蛋疼的因为重名造成的错误……

本文通过一个简单的C#程序示例,深入浅出地讲解了局部变量与全局变量的作用域问题,解释了重名变量如何影响程序运行,并给出了调试过程中遇到的具体问题及解决思路。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

因为一个重名,让我拔掉了放着音乐的耳机,静静地倒腾了一个多小时,哎……上程序

 class Program
    {
        static int[] location = { 0, 0 };
        static void Main(string[] args)
        {
            int[] location = {0,0}; //当初并没发现还定义了一个局部变量location
            location[0] += 8;
            Draw();
            Console.ReadKey();
        }
        static void Draw()
        {
            Console.WriteLine(location[0]);
        }
      
    }
我没发现Main()中的location变量,所以在一进入Draw()方法时,原本location[0] += 8;应该变成8,但一进入Draw()location[0]会立即变为0,当时在调试时看到这一步直接傻眼了,还以为vs出了问题呢……

在发现Main()中还定义了一个重名的局部变量后,便开始考虑是否是这个重名惹的祸……

百度查之,当局部变量同全局变量重名时,在定义这个重名的局部变量的方法内,是这个局部变量在起作用,但当一出这个方法,便会是到了全局变量的天下,此时,那个局部变量会失效,再调用这个名字的变量时,便是调用的是全局变量。

比如本程序,为何一进入Draw()后,location[0]便会变为0?因为在Main()中加8的那个是局部变量,而出了Main(),局部变量便失效,该是全局变量location的天下了。这时全局变量location[0]的初始值还是0,所以才会变为0……

想了想,还是变量作用域的问题,基础啊……基础……哎……

对了,这里的Main()之外类里面的location数组,是叫全局变量还就是一个字段呀,给我留言……

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值