同步学习C#笔记11(二维数组;变量的生命期)

你现在已经有了一维数组的基础,继续学习二维数组会更容易。


一、二维数组的应用

1表格和游戏中的网络地图,适合用二维数组表示

2许多经典游戏都建立在二维数组的基础之上(俄罗斯方块,数独)


二、了解二维数组分四步

1创建数组                        int[,] array2d = new int[4,5];        //通常第一个数代表行,第二个代表列。

2填写数据                        array[0,0] =1;

3修改数据                        array[0,0] = 9;

4读取数据                        Console.Writeline(array[0,1]); 


三、二维数组的长度

我们知道,一维数组有一个长度,它的下标是用一个数字表示的。

而二维数组有行和列,那么它的下标就用两个数字表示

所以要分别获取两个维度的长度:

int[,] array = { {2, 3, 4} , {5, 6, 7} };

int 行数 = array.GetLength(0);

int 列数 = array.GetLength(1);


四、变量生命周期

1.什么是变量生命期?

一个变量在何时生,何时死?我们可以从具体例子入手。

先从函数参数讲起,我们在main函数中定义一个int值a = 3,同时在main函数之外定义一个函数Func,在Func函数中打印a+1,最后在main函数中调用Func函数。如图

        static void Func(int a)
        {
            //a++;
            a = a + 1;
            Console.WriteLine($"Func a = {a}");
        }

        static void Main(string[] args)
        {
            int a = 3;
            Func(a);
        }

此时显然得到的答案是a = 4

那么如果在这时同时在main中直接打印a的值,会得到什么结果?

        static void Func(int a)
        {
            //a++;
            a = a + 1;
            Console.WriteLine($"Func a = {a}");
        }

        static void Main(string[] args)
        {
            int a = 3;
            Func(a);

            Console.WriteLine($"main a = {a}");

            
        }

你会惊讶的发现,结果是:

Func a = 4
main a = 3

 这意味着从func函数回到main函数之后,a的值没有变化。

那么为什么会这样呢?


想要理解也很简单,首先,上述例子有所误导,我们适当改变原例

        static void Func(int c)
        {
            //a++;
            c = c + 1;
            Console.WriteLine($"Func a = {c}");
        }

        static void Main(string[] args)
        {
            int a = 3;
            Func(a);

            Console.WriteLine($"main a = {a}");

            
        }

我们可以清楚的看到Func函数中调用了main函数中的a的并输出了Func函数中c的结果

这个c并不是main函数中的a本身。

若把函数比作一个盒子,那么盒子里的参数什么时候创建,又是什么时候被销毁,这就是变量生命期的思想。


如上例,func函数每次执行都会先调用即创建参数3,并执行打印3+1的指令,随后就会被销毁。

因此,在main函数中,调用无数次func函数(a),结果之后会打印无数次的Func a = 4。同时由此可以推出,当int a = 3;执行时,main函数就创建了一个值为3 的参数,而当main函数执行完成后,参数随之销毁,这就是变量的生命期。我们所熟悉的for循环等局部变量,就是一个短暂的变量生命期。


2.把变量定义到函数之外

有一种特殊的情况是,我们可以把变量定义到函数之外。(以random为例)

static Random random = new Random();

 如图所示的写法。可以使我们在任何其他函数中调用random变量。那么根据变量生命期的原则,我们需要讨论一个变量何时创建何时销毁,random这个变量会何去何从?

我们可以通过vs最左侧打断点的方式去观察并判断。

结果是当需要执行random函数时,将会创建random,但并不销毁,直到main函数运行结束后,销毁。

为何特殊,按照逻辑而言,既然random需要被每个函数调用,那么它应该最先创建才对,可是random却在第一次需要执行时才被创建,并只创建一次,直到程序结束后销毁。

这个就是函数之外的静态变量的生命期。


五、总结

理解变量的生命期,也就理解了代码的整体脉络。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值