这是关于内存的知识,我们设置的变量使如何存放的,C++的存储方式需要用到如下三个名词来解释:
持续性:分为1.自动存储持续性2.静态存储持续性。什么意思呢,就是指我们的这个变量的有效期为多少。在默认情况下,在函数中声明的函数参数和变量的存储持续性为自动,作用域为局部,超过了这个代码块就会消亡:
int main()
{
int a = 1;
{
int b = 2;//我们关注这里的b,在此阶段b存在
}//退出代码块b已经消亡了,这就是自动存储类型的含义
return 0;
}
作用域:作用域描述了名称在文件的多大范围内可见,举个例子感受一下作用域。
int main()
{
int a = 1;//这里先来一个a
{
int a = 2;//再来一个不一样的a
cout<<a<<endl;//①处的a输出的是多少?
}
cout<<a<<endl;//②处的a输出时多少?
return 0;
}
应该感到疑惑,①处a输出的是多少,答案是2。其实是在里面的代码块星定义的a隐藏了以前的定义,新定义可见,旧定义不可见,因此中间的代码块非上面的a的作用域。
②处输出时多少,答案是1。因为代码块中a是自动存储的,在出这个代码块的时候已经消亡了,旧的a定义又重新可见了,因此又可以说后面是上一个a的作用域。
链接性:链接性一共分三种。1、外部链接性(可在其他文件中访问)2、内部链接性(只能在当前文件中访问)3、无链接性(只能在当前函数或代码块中访问)
举个例子说明链接性
···
int golbal = 1000;//外部链接
static int one_file = 50;//内部链接
int main()
{
···
}
void func(int n)
{
static int count =0;//无链接
int llama = 0;
}
在上面的代码中,列出了三种链接,均是以静态存储持续性变量(相对于动态的,可以思考一下)的方式提供的。
值得注意的细节是,要创建链接性为外部的静态持续变量,必须在代码块的外面声明它;要创建链接性为内部的静态持续变量,必须在代码块外声明它,并且使用static限定符;要创建没有链接性的静态持续变量,必须在代码块内声明它,且使用static限定符。
|