学科分类
目录
C语言

不同关键字修饰变量

变量可以使用不同关键字进行修饰,被关键字修饰之后,变量的使用就会受到某些限制,例如,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已经很少使用了。

点击此处
隐藏目录