7.3.1 auto
(1)auto关键字在C语言中只有一个作用,那就是修饰局部变量。
(2)auto修饰局部变量,表示这个局部变量是自动局部变量,自动局部变量分配在栈上。(既然在栈上,说明它如果不初始化那么值就是随机的,脏的…)
(3)平时定义局部变量时就是定义auto的,只是省略auto关键字而已。可见,auto的局部变量其实就是默认定义的普通的局部变量。
7.3.2 static
(1)static关键字在C语言中有2种用法,而且这两种用法彼此没有任何关联、完全是独立的。其实当年本应该多发明一个关键字,但是C语言的作者觉得关键字太多不好,于是给static增加了一种用法,导致static一个关键字竟然有两种截然不同的含义。
(2)static的第一种用法是:用来修饰局部变量,形成静态局部变量。要搞清楚静态局部变量和非静态局部变量的区别。本质区别是存储类不同(存储类不同就衍生出很多不同):非静态局部变量分配在栈上,而静态局部变量分配在数据段或者bss段上。
(3)static的第二种用法是:用来修饰全局变量,形成静态全局变量。要搞清楚静态全局变量和非静态全局变量的区别。区别是在链接属性上不同,讲到链接属性时详细讲。
分析:
1、静态局部变量在存储类方面和全局变量一样。
2、静态局部变量在生命周期和全局变量一样。
3、静态局部变量和全局变量的区别是:作用域、链接属性。静态局部变量作用域是代码块作用域(和普通