存储的类别是变量的属性之一,C++语言定义了4种变量的存储类别,分别是auto变量、static变量、register变量和extern变量。以下重点介绍这几种类型。
一、auto变量
auto变量是C++默认的存储类型。函数内未加存储类型说明的变量均被称为自动变量,即自动变量可省略关键字auto。
{
int i, j, k;
}
等价于
{
auto int i, j, k;
}
auto变量具有以下特点:
- 自动变量的作用域仅限于定义该变量的个体内;
- 自动变量属于动态存储方式,变量分配的内存在栈中,当函数调用结束后,自动变量的值会被释放;
- 自动变量的作用域和生命期都局限于定义它的个体(函数或复合语句内),不同个体中允许使用同名的变量,不会产生混淆。
输出不同生命期的变量值,代码如图1.1所示。
程序运行结果如1.2所示
二、static变量
在声明变量前加关键字static,可以将变量声明成静态变量。
//声明变量为静态变量
static int a, b;
static float x, y;
static int a[3]={0, 1, 2};
使用static变量实现累加代码如图2.1
程序运行结果如图2.2所示。
三、register变量
在C++中,register关键字用于声明一个寄存器变量。使用register声明的变量,编译器会尽量将其存储在寄存器中,以提高访问速度。由于寄存器变量存储在寄存器中,它们的访问速度会比存储在内存中的变量更快。但需要注意的是,register关键字只是对编译器提供的一个建议,编译器不一定会将变量存储在寄存器中。编译器可能会根据实际情况决定是否将变量存储在寄存器中,比如当寄存器的数量有限时。此外,有些编译器可能已经不再支持register关键字,因为现代的编译器已经足够智能,能够根据代码的上下文自动进行优化,包括变量的存储和访问。
综上所述,register关键字在现代的C++中已经不常用或不再具有实际意义,而且有些编译器可能已经不再支持。因此,在实际编程中,我们通常不需要使用register关键字来声明寄存器变量。
四、extern变量
在C++中,extern关键字用于声明一个变量,表明该变量是在其他地方定义的。当我们在一个C++文件中使用extern声明一个变量时,实际上是告诉编译器在其他文件中定义了这个变量,需要在链接时找到它。
在示例1.cpp源文件中定义全局变量a、b、c,代码如下。
在示例2.cpp源文件中要使用示例1.cpp中的全局变量a、b、c,代码如下。
五、总结
以上就是今天要讲的内容,本文简单介绍了C++基础中的变量类型如auto变量、static变量、register变量和extern变量以及应用。
六、结言
感谢大家的阅读与参与,您的支持是我前进的动力!让我们一起进步,加油!谢谢您的支持!!!