在C语言中,变量和常量是两种基本的存储实体,它们在程序中用于存储和操作数据。
1.变量(Variables):
变量是程序运行期间可以更改其值的标识符。也就是说,变量的值可以在程序执行的不同时刻被赋予不同的值。
变量在使用之前需要声明,声明时要指定变量的名称和类型。
例如:int x;
这里,x
是一个整数类型的变量。
变量可以在程序中的任何地方被赋值,例如:x = 10;
2.
常量(Constants):
常量是程序运行期间其值不能被更改的标识符。也就是说,一旦给常量赋了一个值,就不能再更改它。
常量通常在定义时就赋值,并且它们的值在程序的整个生命周期中都是不变的。
在C语言中,可以使用const
关键字来定义常量。
例如:const int y = 20;
这里,y
是一个整数类型的常量,其值为20,且不能更改。
注意:常量名通常使用大写字母,以与变量名区分。但这并不是强制性的,只是一种编程习惯。
在C语言中,常量也可以不显式地声明为const
,例如,字面值(如10
、20.5
、'A'
等)和预定义的宏(如NULL
、SIZE_MAX
等)都是常量。
3.变量的存储形式
这里只需要记住变量的四种修饰。
3.1 auto (一般形式)
auto:auto说明的变量只能在某个程序范围内使用,通常在函数体内或函数中的复合语句里。通常在编译器中不用写,默认为auto。
3.2 static(重点)
static:1.修饰全局静态变量
(1)静态全局变量存储在程序的静态存储区。
(2)如果静态全局变量在定义时没有显式初始化,它会被自动初始化为零(对于数值类型如int
)或空指针(对于指针类型)。如果提供了初始值,那么变量将被初始化为该值。
(3)静态全局变量的生命周期是整个程序的执行期间。这意味着它们从程序开始执行时就被创建,并且在程序结束之前都不会被销毁。
(4)静态全局变量的作用域从它们被声明的点开始,一直到定义它们的文件的末尾。在其他文件中,静态全局变量是不可见的,即它们的作用域被限制在定义它们的文件内。
2.修饰局部静态变量
(1)静态局部变量存储在程序的静态存储区,而不是栈上。这是因为它们的生命周期比普通局部变量长,需要在整个程序的执行期间都存在。在函数内多次调用时,静态局部变量的值不会被销毁和重新分配,而是保留在上一次函数调用结束时的值。
(2)如果静态局部变量在定义时没有显式初始化,它会被自动初始化为零(对于数值类型如int
)或空指针(对于指针类型)。如果提供了初始值,那么变量将被初始化为该值,并且只会在程序开始时初始化一次。
(3)静态局部变量的生命周期是整个程序的执行期间,而不是仅限于函数调用期间。这意味着它们不会在每次函数调用结束时被销毁,而是在整个程序执行期间都保持存在。当函数再次被调用时,静态局部变量的值将保持上次函数调用结束时的值,而不是被重新初始化。
(4)静态局部变量的作用域仍然是局部的,仅限于声明它们的函数内部。这意味着它们只能在声明它们的函数内部被访问。尽管它们的生命周期比普通局部变量长,但它们的可见性仍然局限于声明它们的函数内部,不能在函数外部访问。
3.修饰静态函数
(1)静态函数的作用域是从它的定义点开始,直到包含它的文件的末尾。这意味着,只要在其定义之后的代码中,都可以在任何函数之外直接调用它。它只在定义它的文件内部可见。
3.3 extern
extern:当变量在一个文件中的函数体外说明,所有其他文件中的函数或程序段都可引用这个变量。
3.4 register
register:register变量是想将变量放入CPU的寄存器中,这样可以加快程序的运行速度。
4.常量的修饰
const:修饰常量,常量不能改变,修饰函数,函数的参数不能改变。
define:符号替换