C++变量的四种存储类型
上节我们介绍了动态内存的使用。C++动态内存的分配、使用、释放以及内存泄漏
本节我们介绍四种存储类型。
- 数据类型: 如
int, float, double
等。在之前详细介绍过。C/C++输入与数据类型 - 存储类型,总共有四种: 自动变量(auto),静态变量(static),外部变量(extern)以及寄存器变量(register)。
auto变量
-
函数中所有使用的非静态局部变量。
#include <stdio.h> using namespace std; //正常的用完就释放 void test() { //C++会报错,因为auto已经变强了,不需要指定类型,自动匹配 //只能在C语言中写 //auto int a = 100; int a = 100; printf("a = %d\n", a); { int b = 100; printf("b = %d\n", b); } //printf("b = %d", b);//报错,未定义的标识符 } int main() { test(); return 0; }
register变量
-
Cpu从寄存器中读取速度远远大于从内存中读取的速度。
-
一般经常被使用的变量,循环使用几千次,可以设置成寄存器变量,register变量会存储在寄存器中,运算速度远快于在内存中的非register变量。
-
注意: 没有地址,因为不在内存中。不能定义为全局变量。
-
已经被C++优化,如果打印它的地址,它就会变成普通的auto变量
static变量
-
静态变量: 值是全局的,但是作用范围只能在当前块中。
-
调用函数时,无论调用多少次函数,只定义一次。
#include <stdio.h> using namespace std; void test() { static int a = 100; a += 12; printf("a = %d\n", a); } int main() { test(); test(); //不能在此次调用static int a变量,它的有效范围只有test()函数中 //printf("a = %d\n", a); return 0; }
输出结果:
a = 112 a = 124
extern变量
-
外部变量,意味着你可以在别的文件中定义变量,在该文件中使用该变量。
例如此处:
//a.cpp #include <stdio.h> int a = 100; /*--------------------*/ //main.cpp #include <stdio.h> using namespace std; extern int a; int main() { printf("a = %d\n", a); a += 10; printf("a = %d\n", a); return 0; }
输出结果:
a = 100 a = 110
本节介绍了四种变量存储类型,下节我们介绍变量的作用域和生存周期。