C++和其他程序设计语言不同,主函数main中定义的变量也是局部的,只有在主函数中才能使用。
在计算机中,内存被分为不同的区域。按照变量在计算机内的储存位置来分,变量可以分为自动变量、静态变量、寄存器变量、外部变量。下面逐个介绍。
- 自动变量auto
如果不专门声明为其他储存类型,都是自动变量。因此 auto int a; 和 int a; 是等价的。
## C++11中auto被用于自动推断了。
- 静态变量static
如果不希望该程序其他源文件中的函数使用某全局变量,可以设置为静态变量,保持结构良好。
如果是应用在局部变量,则该变量不再存放在函数对应的帧中,而是存放在全局变量区。函数执行完毕依然存在,在下次函数调用时继续使用原空间中的值。也就是说可以把该变量的信息带到下一次函数调用中。
另:1.未被初始化的静态变量都由系统初始化为0;2.如果程序中既有静态的局部变量也有全局变量,则系统先消亡静态的局部变量,再消亡全局变量。
- 寄存器变量register
只有局部自动变量才能定义为寄存器变量。系统会把这些变量的值直接存储在CPU的寄存器中,用于代替自动变量。
现在的编译器可以识别出频繁使用的变量,并且会自动进行优化,不需要程序员去进行声明,而是编译器自己决定了。
- 外部变量extern
外部变量一定是全局变量,如果在定义点前或另一个源文件的函数也要使用,就可以设置为外部变量,使用时相当于告诉编译器此处使用了未见过的变量,将在别处定义。
以上。