不同关键字修饰变量
变量可以使用不同关键字进行修饰,被关键字修饰之后,变量的使用就会受到某些限制,例如,const关键字可以使变量不能够被更改、static关键字保证变量只能在本文件中有效等。下面介绍几个常用的修饰变量的关键字。
1、const
变量定义之后,在程序的其他位置可以引用和修改变量。但程序中定义的一些变量,如圆周率pi=3.14,黄金分割比例g=0.618,这些变量只需被引用,不应被修改。C语言中可使用const关键字修饰变量,防止变量在定义后被修改,const关键字修饰变量的具体示例如下:
int x=10; //定义变量x,值为10
x = 15; //修改变量x的值为15
const int y=10; //使用const修饰y, y成为常变量
y=20; //修改y的值,报错,y的值无法被更改
使用const修饰的变量称为常变量,需要注意的是,虽然理论上常变量不能被修改,但C语言中仍能通过指针间接更改常变量的值。
2、static
static是一个很特殊的关键字,它在C语言中有3种用法,并且这3种用法没有任何关联,完全是相互独立的,下面简单介绍一下static的3种用法。
(1)static修饰局部变量,该局部变量称为静态局部变量。静态局部变量与普通局部变量的区别在于存储位置不同,普通局部变量存储在栈中,静态局部变量存储在静态区,程序运行结束后释放静态局部变量的内存空间。普通变量必须手动初始化才可以引用,静态局部变量如果未初始化,系统会默认初始化为0。
(2)static修饰全局变量,该全局变量称为静态全局变量。静态全局变量与普通全局变量的区别在于链接方式不同,静态全局变量为内链接方式,即只在本文件中有效,外部文件不可见,而普通全局变量为外部链接方式,即可被其他源文件调用。
(3)static还可以修饰函数,static修饰的函数是一个静态函数,其作用与静态全局变量相同,静态函数只在本文件内有效,不能被外部文件调用。
关于局部变量、全局变量、函数等相关概念会在后续章节中陆续深入学习,在这里,读者只需要了解static关键字可以修饰变量即可。
3、extern
extern用于修饰全局变量,其作用与static相反,extern修饰的全局变量表示该全局变量可以被其他文件调用。如果有文件要引用其他文件中的全局变量,则在该文件中使用extern关键字引入即可。
此外,extern还可以修饰函数,表示函数是外部函数,可被其他文件调用,函数的相关知识将在第7章讲解。
4、volatile
volatile本身是“易变的”的意思,在C语言中,使用volatile修饰变量表示该变量可能会被修改,这个修改并不是编译器对它的修改,而是其他代码(如多线程)或硬件对它进行修改。编译器不会对volatile关键字修饰的变量进行优化,以防止程序运行出现错误。在C语言编程中,volatile关键字并不常用。
5、auto
auto关键字用于修饰局部变量,其作用是表明该变量是存储在栈上的,例如下面两行代码:
auto int a = 10;
int b = 10;
上述两行代码含义是一样的。需要注意的是,如果使用auto直接定义变量,则变量类型默认是int类型(整型),示例代码如下所示:
auto a; //a是int类型
变量a没有指定类型,默认为int类型。由于现在编译器默认局部变量都是auto,因此auto已经很少使用了。