IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C++学习笔记——4种存储类别 -> 正文阅读

[C++知识库]C++学习笔记——4种存储类别

C++种变量的存储类别有4种:自动的(auto),静态的(static),寄存器的(register),外部的(extern)。

一、自动变量

函数的局部变量,不加关键字static,编译系统对它们动态地分配存储空间
用的时候就分配存储空间,不用的时候就释放。这就是自动变量。如

auto int a;

存储类别auto和数据类型int的顺序任意。
关键字auto可以省略,如果不写auto,则系统把它们默认为自动存储类别,它属于动态存储方式。

二、用static声明静态局部变量

如果希望函数中的局部变量在函数调用结束后不消失而是保留原值,即其存储空间不释放,下一次再调用此函数时,该变量保留上一次调用结束时的值,就要指定该局部变量为静态局部变量。如

...
...
int f()
{
	static int a=2;
	a++;
	return a;
}
int main()
{
	for(int i = 0 ; i < 3 ; i++)
	cout << f();
}

依次输出3,4,5。

注意哟

(1)对静态局部变量是在编译时赋初值的,即只赋初值一次。以后每次调用函数时不再重新赋初值而是保留上一次函数调用结束时的值

(2)静态局部变量编译时自动赋初值0(对数值型变量)或空字符(对字符变量)。自动变量不赋初值的话,它的值就是一个不确定的值

(3)虽然静态局部变量在函数调用结束后仍然存在,但其他函数是不能引用它的。

三、用register声明寄存器变量

一般情况下,变量的值是存放在内存中,程序中用到哪一个变量的值,就要从内存中取出该变量的值,再送到CPU中的运算器。如果一个变量使用频繁,那存取变量的值要花不少时间。

为提高效率,C++允许将局部变量的值存放在CPU的寄存器中,需要时直接从寄存器中取出来运算,不必再到内存中去存取。
这种变量叫寄存器变量,用关键字register作声明。

int fac(int n)
{
	register int i , f=1;    //定义i和f是寄存器变量
	for(i=1 ; i<=n ; i++)    //如果n的值大,则能节约许多执行时间
		f=f*i;
	return f;

在程序中定义寄存器变量对编译系统只是建议性的。当今的优化编译系统能够识别使用频繁的变量,从而自动地将这些变量存放在寄存器中,而不需要程序设计者指定。因此在实际中不必用register来声明变量

四、用extern声明外部变量

用extern声明全局变量(外部变量),可以扩展全局变量的作用域。

1、在一个文件内声明全局变量

如果在全局变量的定义点之前的函数想引用该全局变量,用extern对该变量作外部变量声明。

int main()
{
	extern int a,b;  //对全局变量a,b作提前引用声明
	cout << max(a,b);
}
int a = 15,b = -7;  //定义全局变量a,b
int max(int x,int y)
{
	return x > y ? x : y;
}

输出15

2、在多文件的程序中声明外部变量

想在一个文件中引用另一个文件中已定义的外部变量,正确做法:在任一文件中定义外部变量,在另一文件中用extern对该变量作外部变量声明。(编译系统会自己去找)

file 1.cpp

extern int a,b;
int main()
{
	cout << a << "," << b;    //输出3,4
	return 0;
}

file 2.cpp

int a = 3 , b = 4;
...

注意哟

1、extern是用作变量声明,而不是变量定义。它只是对一个已定义的外部变量作声明,以扩展其作用域。

2、慎重使用

五、用static声明静态外部变量

如果希望某些外部变量只限于被本文件引用,而不能被其他文件引用,这是可以在定义外部变量时加一个static声明。如
file 1.cpp

static int a=3;
int main()
{
	...
}

file 2.cpp

extern int a;
int func (int n)
{
	...
	a = a * n;
	...
}

file 2.cpp文件中虽然用了"extern int a;",但是仍然无法引用file 1.cpp文件中的全局变量a。

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-10-06 12:00:37  更:2021-10-06 12:01:19 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/20 0:16:23-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码