C++031(变量的存储类型-auto变量)

变量的存储类型

之前我们学习过变量的数据类型。除此之外,变量还分为4种存储类型,分别是auto、static、register和extern。

存储方式不同,变量的作用域和生存期也不同。生存期和作用域,从时间和空间两个不同的维度描述了一个变量。

auto变量

auto变量是动态存储变量,只在程序执行到它时才从栈区分配存储单元,使用完毕后立刻释放该存储单元。

例如,函数形参即为auto变量 ,函数定义时并不会为其分配存储单元,函数调用时才会分配,调用完毕后会立即释放存储单元。auto变量 存放在动态存储区中。auto是C++默认的存储类型。也就是说,凡未加存储类型说明的变量均为auto变量,且auto关键字可以省略。因此:

复制代码
int i,j,k;

等价于:

复制代码
auto int i,j,k;

auto变量具有以下特点

(1)auto变量 的作用域和生存期仅限于定义该变量的个体内。也就是说,在函数中定义的auto变量,只在该函数内有效,无法在函数外使用;在复合语句中定义的auto变量,只在该复合语句中有效,无法在复合语句外使用。例如:

c++ 复制代码
int Show()
{
	auto int x,y;	//变量x,y的作用域为整个Show()函数
	if(true)
	{
		auto char ch;	//变量ch的作用域为if语句块
		cout<<ch<<endl;	//正确
		cout<<x<<endl;	//正确 
	 } 
	 cout<<ch<<endl;	//不可在if语句块外使用变量ch,错误
	 cout<<x<<endl;		//正确 
}

(2)不同的个体(函数或复合语句)中允许使用同名变量而不会混淆。

例如,函数内定义的auto变量可以与复合语句中定义的auto变量同名

同名变量的"屏蔽"作用。

本实例中,定义两次auto变量k,分别在if语句内外使用此变量进行计算,观察结果,思考auto变量的作用。代码如下:

c++ 复制代码
#include <iostream>
using namespace std;
int main()
{
	auto int i,j,k;	//第一次定义k,作用域为整个main函数
	cout<<"input the number:"<<endl;
	cin>>i>>j;
	k=i+j;	//令k等于i、j之和
	if(i!=0 && j!=0)	//if语句
	{
		auto int k;	//定义同名变量k,作用域仅限if语句
		k=i-j;	//令k等于i、j之差
		cout<<"k:"<<k<<endl;	//输出k的值 
	 } 
	 cout<<"k:"<<k<<endl;	//退出if语句,返回main()函数。输出k的值 
}
输出结果
    6
	2
k:4
k:8
  1. 程序运行结果如上所示。
  2. k为auto变量,第一次输出的是i-j的值,第二次输出的是i+j的值。
  3. 本例中,虽然变量名都为k,但由于位于不同的作用域和拥有不同的生存期,其实是两个不同的变量。
  4. 表面看来,就好像if语句内的变量"屏蔽"了外部的同名变量。
相关推荐
小龙报15 分钟前
《算法通关指南:数据结构和算法篇 --- 顺序表相关算法题》--- 询问学号,寄包柜,合并两个有序数组
c语言·开发语言·数据结构·c++·算法·学习方法·visual studio
序属秋秋秋15 分钟前
《Linux系统编程之开发工具》【编译器 + 自动化构建器】
linux·运维·服务器·c语言·c++·自动化·编译器
夏玉林的学习之路1 小时前
正则表达式
数据库·c++·qt·mysql·正则表达式
夜晚中的人海1 小时前
【C++】模拟算法习题
c++·算法·哈希算法
报错小能手2 小时前
C++笔记(面向对象)多态(编译时 运行时)
c++·笔记
晨非辰2 小时前
《数据结构风云》递归算法:二叉树遍历的精髓实现
c语言·数据结构·c++·人工智能·算法·leetcode·面试
太理摆烂哥2 小时前
map&&set的使用
c++·stl
Dream it possible!2 小时前
LeetCode 面试经典 150_链表_LRU 缓存(66_146_C++_中等)(哈希表 + 双向链表)
c++·leetcode·链表·面试
mailangduoduo2 小时前
命令行传参及调试——vscode平台
c++·人工智能·vscode·代码调试·命令行传参
敲上瘾2 小时前
Linux系统C++开发工具(四)—— jsoncpp 使用指南
linux·服务器·网络·c++·json