存储持续性、作用域与链接性

最近被各种变量逼疯,感觉学的很不牢靠,重新翻书补一补,归纳一下。

存储类别分类如下:

1. 自动存储持续性
2. 静态存储持续性
3. 线程存储持续性
4. 动态存储持续性

1 自动存储持续性

函数中默认的变量的存储持续性是自动的,作用域为局部,没有链接性。
函数中新代码块中同名变量的定义会隐藏以前的定义,新定义可见,旧定义暂时不可见,程序离开该代码块后,原定义又重新可见了。
存储方式——堆栈。

2 静态持续变量

链接性分为三种:外部链接性,内部链接性,无链接性。
所有的静态变量都是零初始化。

外部链接性

每个使用外部变量的文件,都必须声明这个外部变量。
单定义规则:变量只能有一次定义。

综上所述,变量声明有两种:

  • 定义声明:给变量分配存储空间。
  • 引用声明:不给变量分配存储空间。

引用声明使用extern关键字,且不进行初始化,否则声明为定义,导致分配存储空间。

//external.cpp
#include<iostream>
using namespace std;

double warming = 0.3;

void update(double dt);
void local();
int main()
{
	cout << "Global warming is " << warming << " degrees.\n";
	update(0.1);
	cout << "Global warming is " << warming << " degrees.\n";
	local();
	cout << "Global warming is " << warming << " degrees.\n";
    return 0;
}

在函数中定义与全局变量同名的局部变量后,该变量被视为自动变量,局部变量将隐藏全局变量。
作用域解析符(::):放在变量名前面时,表示使用变量的全局版本。
:在多文件程序中,可以在一个文件(且只能在一个文件)中定义一个外部变量,使用该变量的其他文件都必须使用关键字extern声明它。

内部链接性

static限定符用于作用域为整个文件的变量时,该变量的链接性为内部的。
链接性为内部的变量只能在其所属的文件中使用,但常规外部变量都具有外部链接性,即可以在其他文件中使用。

无链接性

将static限定符用于代码块中定义的变量,使用static后,局部变量的存储持续性为静态的,即该变量只在该代码块中可用。

const:const全局变量的链接性是内部的。
可用extern来覆盖const,使其变为外部的,但是使用该变量要用extern声明它。

语言链接性

通过函数原型来指出函数要使用的约定:
举例:

extern "C" void spiff(int);
extern void spoff(int);
extern "C++" void spaff(int);

第一种使用C语言链接性;
第二种、第三种使用C++链接性。

函数的链接性

使用static也可将函数设置为内部的,是指只能在一个文件中使用。ps.必须同时在原型和函数定义中使用该关键字。

可以在函数原型中使用extern关键字来指出函数是在另一个文件中定义的,这要让程序在另一个文件中查找函数,该文件必须作为程序的组成部分被编译,或者是由链接程序搜索的库文件。

3 动态持续变量

new delete

1 使用new运算符初始化
两种初始化方式,用括号初始化,列表初始化。

int *pi=new int(6);

int *pin=new int{6};

2 new失败
P320
3 new:运算符、函数和替换函数
P320
4定位new运算符

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值