当前位置: 首页 > ds >正文

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变量,只在该复合语句中有效,无法在复合语句外使用。例如:

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变量的作用。代码如下:

#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的值 
}
输出结果62
k:4
k:8
  1. 程序运行结果如上所示。
  2. k为auto变量,第一次输出的是i-j的值,第二次输出的是i+j的值。
  3. 本例中,虽然变量名都为k,但由于位于不同的作用域和拥有不同的生存期,其实是两个不同的变量。
  4. 表面看来,就好像if语句内的变量“屏蔽”了外部的同名变量。
http://www.xdnf.cn/news/9701.html

相关文章:

  • 塔能空化泵节能方案:工厂能耗精准控制的革新之选
  • 博图SCL基础知识-寻址调用及新建SCL
  • 记一次前端逻辑绕过登录到内网挖掘
  • 计算机内存管理全解析:从基础原理到前沿技术(含分页/分段/置换算法/大页/NVM/CXL等技术详解
  • C++ explicit关键字有什么作用
  • Dify+MCP Server打造禅道AI智能助手
  • LeetCode 136:只出现一次的数字 - 巧用异或运算的极致解法
  • Open3D上可视化Nuscenes 数据集
  • 谷歌浏览器Google Chrome v137.0.7151.41 中文版本版+插件 v1.11.1
  • 【Echarts】象形图
  • : influxdb + grafana+JMeter
  • 自回归建模模型(AR)
  • C++进阶--C++11(03)
  • 一种字典树的Python实现
  • 什么是数字化转型,如何系统性重构业务逻辑
  • Android 构建系统中常见的 .mk 文件及其作用
  • 涨薪技术|0到1学会性能测试第88课-Web_service_call函数
  • Spring AI Alibaba 发布企业级 MCP 分布式部署方案
  • LeetCode 169:多数元素 - 摩尔投票法的精妙解法
  • 【freertos-kernel】queue(发送)
  • # Python 语音助手本地的ollama实现
  • nt!MmMapViewInSystemCache函数分析PointerPte的填充
  • AD/DA HAL库API
  • 内容中台的构建基础是什么?
  • King3399(ubuntu文件系统)iic(i2c)功能测试
  • MP4视频文件播放Demo(附源码)
  • 头歌之动手学人工智能-Pytorch 之autograd
  • 算法 Arrays.sort()函数自定义排序(Comparator 接口)
  • [网页五子棋][匹配模块]服务器开发、用户管理器(创建匹配请求/响应对象、处理连接成功、处理下线)
  • 根据jvm源码剖析类加载机制