OK，接下来呢，我们就来了解一下什么是静态局部变量。
所谓静态局部变量啊，指的就是在函数中所定义的一些局部变量。
那么与普通的局部变量不同，静态局部变量它的值呢，
在函数调用结束后啊，不会消失。
它不会像普通的局部变量那样被释放掉，
而是会保留原来的值， 一直存在在那里。也就是说，
它所占用的存储空间是不被释放的。
如果还有下一次函数调用的时候，仍然可以继续使用
这样的一些局部变量，那这样的变量就被称作静态局部变量。
那怎么去定义一个静态局部变量呢？非常地简单，那么
只要在原来普通变量定义的前面加一个static
static，就可以完成一个静态局部变量的定义了。
OK，那么为了让大家更好地理解什么是静态局部变量，我们来看一个例子。看这个例子，
在这个程序里头啊，定义了一个函数，function，
在function里头呢，我定义了两个变量，一个变量是普通的局部变量a，
第二个变量呢，是一个静态局部变量b，然后接下来呢在这个函数中分别对
a和b进行加1的操作。也就是说如果这个函数调用一次的话，我就对a
加一次1，然后如果调用一次的话就对b加一次1，然后我分别打印a和b的值。
那么在主函数里头呢，我就用一个for循环，连续
五次去调用这个function函数。那明白这个程序的作用了吧？
那么在主函数里头啊，我反复地去调用function这个
函数。反复调用五次，然后这个function这个函数里头呢
有一个普通的局部变量a和一个静态局部变量b，
它所做的事情呢就是对a和b进行加1的操作，然后打印输出a和b。
OK，那么通过运行这个程序，我们就来比较一下静态局部变量和
普通局部变量的不同。我们来看一下这个程序的运行结果，这个运行结果是这样的。
毫无疑问，那么第一次调用的时候，a等于0，b等于0，然后呢
a等于a+1，b等于b+1，那么最后输出的结果当然是a等于1，
b等于1，这是毫无疑问的。打印完之后呢，主函数第二次
再来调用function这个函数。那么第二次再来调用这个函数的时候，
对于普通变量a而言，第一次调用的结果将被
释放掉，那么当第二次我们调用function函数的时候，
对于普通变量a而言，需要重新在内存里面
开辟一片内存空间给a，然后重新给a赋值为0。
然后呢，对a进行加1的操作，然后再把a打印出来。
所以第二次当我们再去打印a的时候会打印什么结果啊？ a等于1仍然打印a等于1。
因为实际上这个a和这个a是不同的，那么第一个
a呢，已经被释放掉了，对不对？这是第二个全新的a。
但对于变量b就不同了， 因为b是一个静态局部变量。那就意味着
b的生存周期是从定义这个变量开始一直到整个文件的
结束。所以，当我们第二次再去调用function这个函数的时候，
还需要再生成一个新的b吗？ 不需要了，那function函数里面的这句程序，
只被执行一次，当你再调用function这个函数的时候，
它就不会再去生成一个新的b了，
而是在原来这个b的基础上继续进行加1的操作。
于是呢，b将被打印出来b等于2。
也就是说啊，虽然function这个函数 被反复调用了多次。
但是static int b，定义
静态局部变量b的这句程序只会被执行
一次。当你第二次再来调用function这个函数的时候，b已经存在了，所以不需要
再去执行这句程序。所以呢，b就在上一次执行结果的基础上继续进行加1的操作。
于是，当我们第三次再去调用function的时候，那么系统呢又会重新生成一个
变量a。但是对于b呢，又会在原来b的基础上再进行加1，于是打印出
a等于1，b等于3.第四次调用的时候呢，也是一样，于是打印出a等于1，b等于4。
第五次调用的时候仍然一样，a等于1，b等于5。
那么通过这个例子，我们就能看的出来，
什么叫静态局部变量。那么跟
静态局部变量b相对应的，我们把
a这种普通类型的变量称作动态局部变量，
也就是普通的局部变量。那么它们两者之间的区别呢，我们就可以用这样一张图
来表示。也就是说，对于我们所定义的普通局部变量，
比方说a，它的作用范围是从这个变量的定义开始，到函数的结尾。
也就是说，当函数调用结束以后，函数相对应的内存空间被释放掉以后，
那么这个变量呢，也就被释放掉了。
这就是普通的动态局部变量。对于我们所定义的静态局部变量，比方说
static int b，它的有效范围呢，就是从变量的定义开始一直持续到整个程序的
结束。所以说当我们去反复调用function的时候，
每次调用过程中都会新生成一个a，
然而对于b呢，每次我们都要基于上一次的结果，
再继续对b进行操作。这就是静态和动态局部
变量的不同。那么在这儿呢，我需要稍微多说一点，
在以前的c++的版本中啊，
所有的普通的动态局部变量，比方说我们所 定义的int
a等于0，这是一个普通的 动态局部变量。那么对于所有的普通的动态局部变量
定义的时候啊，其实在它的前面可以加一个关键字叫auto。
那么加这个关键字跟不加这个关键字呢，它的含义
是一样的。也就是说，在以前的C++的版本中，
对于动态局部变量我就可以加auto，而且呢这个auto是可以省略不写的。
也就是说，当我们去定义一个普通的局部变量用int a
等于0这种形式的时候其实就相当于我们用的是
auto int a等于0，只不过auto被省略不写。
这是在以前的C++的版本中，它的含义是这样的。
但是根据新的，2011版的C++规范，
由于呢，老的版本中这个auto它的作用呢实在是太小，
所以在新的C++的规范中， 重新定义了auto这个关键字的含义。
它的新的含义跟老的含义完全不同了，
那么由于这是一个C++规范的新的变动，所以如果有的同学在
有些参考资料上面看到关于auto的介绍的话，请你注意这一点。
那么有的同学可能要问了，那关于新的这个auto它的含义到底是什么呢？
OK，等到同学们再去学C++的部分的时候，面向对象的部分的时候，
我们再去讲述auto的含义。OK，那么这次课呢，我们就讲到这儿。
总结一下这次课的内容，在这次课里头啊，其实我们就讲了两个要点。第一个要点
就是当指针用做函数参数的时候，我们需要注意的情况。
第一个需要注意的就是，当函数获取的一个指针类型的
实参的时候，它其实就相当于拿到了指向某个内容的
地址。从而呢，它就可以对这个内容啊，进行修改。所以说，当我们向
某个函数传递一个指针的时候，我们要格外的小心。因为拿到了指针，
就可以对指针所指向的内容进行修改。那么为了
防止这个函数对指针所指向的内容进行不必要的修改，
我们可以使用const来限制指针的功能。这是这次课
我们讲过的第一个要点。第二个要点我们讲的是，当函数返回一个指针的时候，
所应该注意的情况。首先，从函数里面返回一个指针的值，是一个常见的应用。
但是呢，这种情况下我们必须要确保函数返回的
这个地址啊，是有意义的。它是一个出于生存周期中的
内存单元。它不能指向一片已经被释放掉的内存单元。
那么如何才能保证它指向一个有意义的内存单元呢？
那么两种可以选择的途径就是，你可以返回
指向全局变量的指针，或者是返回一个指向局部变量的
指针。所以呢，在这儿我们就介绍了静态局部变量和普通
局部变量的区别。OK，那么这次课的内容呢，我们就先介绍这么多。
那么由于我的出差呢，我就被迫推迟了这个课的发布时间。所以呢，我们相对
安排少一些的内容给大家。那么下一次课呢，是我们这个课程的最后一次课，
我们将给大家介绍结构体和链表相关的内容。
那么在下一次课之后呢，我们将安排期末考试，到时候呢请大家关注。
那么在期末考试的过程中呢，我会根据大家的反馈再酌情地
增加一些相应内容的介绍。最后，谢谢大家。