变量定义

变量的定义用于为变量分配存储空间,还可以为变量指定初始值。在一个程序中,变量有且仅有一个定义。

变量声明

用于向程序表明变量的类型和名字。程序中变量可以声明多次,但只能定义一次。

变量的类型

(1)自动存储变量: 在函数定义中声明的变量(包括函数参数)。当函数或代码块执行时创建变量,当函数或代码块执行完时,这些变量的内存被释放。这类变量在 中分配内存。
(2)静态持续变量: 在函数定义外定义的变量和使用关键字 static 定义的变量,简称 静态变量。这类变量在程序整个运行过程中都存在
(3)动态存储变量: 由new运算符分配内存的变量,直到使用delete运算符将其释放或程序结束。这类变量在 堆(自由存储区)中分配内存。
(4)线程存储变量: 此变量生命周期和线程一样长。这里不做过多解释。

5种变量储存方式

https://www.whbwiki.com/wp-content/uploads/2021/02/图片-13-1024x286.png

描述了名称在文件的多大范围内可见

(1)全局作用域:从变量定义到文件结尾都可用,所以也叫 文件作用域。
(2)局部作用域:如自动变量的作用域在函数内部。

链接性

(1)外部链接性:可在其它文件中访问。
(2)内部链接性:只能在当前文件中访问。
(3)无链接性:只能在当前函数或代码块中访问。

静态持续变量初始化

(1)如果没有显示的初始化静态变量,编译器将把它设置为0
(2)在默认情况下,静态数组和结构将每个元素或成员的所有位都设置为0

举例说明

int global = 1000;
static int one_file = 50;
int main()
{
 ...
}
void fun(int n)
{
	static int count = 0;
	int llama = 0;
...	
}
[c-alert type=”success”]

分析:global 和 one_file 的作用域都为整个文件,global 的链接性为 外部,所以可以在程序的其他文件使用它,而 one_file的链接性为 内部,只可以在本文件中使用它。(程序是多文件

count 和 llama 作用域是 局部 的,没有链接性,也就是说只能在 fun() 中用它们。因为 count变量 是 静态变量,所以 count变量一直存在,即使fun()函数没有执行。而 llama变量 是 当fun()函数执行时被创建,当fun()函数执行完后被释放内存

[/c-alert]

多文件使用外部链接性变量

只需在一个文件中包含该变量的定义(单定义规则),但在使用该变量的其他所有文件中,都必须使用关键字 extern 声明它。

举例说明

//file1.cpp
int cat = 20;  //在file1.cpp中定义cat变量

//file2.cpp
extern cat;	   //在file2.cpp中使用cat变量要先用extern声明
cout << cat << endl;

结束

现在读者应该对变量有了更深刻的认识了