c++变量的存储方式
1.名字的作用域
作用域是从空间的角度来分析的,c++的作用域以花括号分隔,定于于所有{ }以外的名字具有全局作用域,定义于{ }以内的名字具有块作用域
2.变量的生命周期
生命周期是从变量存在的时间角度来分析的,生命周期可以分为静态存储期和动态存储期,这是由变量的静态存储方式和动态存储方式决定的
3.静态存储方式
静态存储方式通常是指在变量在定义时就分配固定内存并一直保持不变, 直至整个程序结束,变量的内存在程序编译阶段就已经分配好
4.动态存储方式
动态存储是指在程序执行过程中,使用变量时才分配内存, 使用完毕时立即释放
5.变量的分类
c++的变量可分为静态局部变量、全局(外部)变量、自动变量、寄存器变量
5.1静态局部变量(静态存储方式)
1)在函数体内用static声明的变量
2)定义时没有初始值将默认初始化为0
3)静态局部变量虽然生存周期为整个程序,但是其作用域仅限于定义它的函数内,也就是说在其他函数中不能使用它
4)静态局部变量初始化的时机:c语言:编译阶段分配好内存之后,就会进行初始化;c++:static局部变量在执行相关代码时才会进行初始化
5.2全局(外部)变量(静态存储方式)
1)在函数外部声明的变量称为全局变量,分为静态外部变量、非静态外部变量
2)静态全局变量:在函数体外用关键字static声明的变量,只允许被本源文件(.cpp)中的函数使用(static的隐藏作用)
3)非静态全局变量:在函数体外没有用关键字static声明的变量,允许被其它源文件中的函数使用,当其他源文件中的函数使用非静态外部变量时,需要在使用用前用关键字extern进行说明
5.3自动变量(动态存储方式)
1)自动变量意为有自动的生命周期
2)在函数体内或者在复合语句内,用关键字auto声明的变量,关键字auto可以省略,我们常说的局部变量就是自动变量
3)定义时不初始化,其值是不确定的
5.4寄存器变量(动态存储方式)
1)一般情况下,变量的值都是存储在内存中的,为提高执行效率,c/c++允许将局部变量存放到寄存器中,这种变量就称为寄存器变量
2)用关键字register声明
6.辨析静态变量、全局(外部)变量、静态局部变量
1)静态变量包含静态全局变量和静态局部变量
2)全局变量包含静态全局变量、非静态全局变量
c++变量的存储方式的更多相关文章
- C语言学习笔记:12_变量的存储方式和生存期
/* * 12_变量的存储方式和生存期.c * * Created on: 2015年7月5日 * Author: zhong */ #include <stdio.h> #include ...
- C语言变量、函数的作用域及变量的存储方式
一.变量的作用域和存储方式 在C语言中每个变量都有两种基本属性:数据类型.数据的存储类别. 数据类型很多人都已熟知,例如:字符型(char).整型(int).浮点型(float)等等.存储类别是指数据 ...
- java笔记之变量的存储方式
1.java变量存储域 java变量的存储区域主要放在以下几个地方: (1)寄存器:可以说是最快的存储区,在C/C++中可以声明寄存器变量,但是在java中不能声明寄存器变量,只是编译器在编译时确定. ...
- C语言中变量的存储方式
变量可以分为全局变量.静态全局变量.局部变量和静态局部变量变量的声明有两种情况:1)一种是需要建立存储空间的(定义性声明).例如int a 在生命的时候就已经建立了存储空间.2)另一种是不需要建立存储 ...
- js变量按照存储方式区分,有哪些类型,并表述其特点
// 值类型 拷贝形式 不像引用类型是指针指向,共用空间 值类型有 undefined string number Boolean var a = 100; var b = a; var a = 20 ...
- C语言的变量存储方式和生存期
2020.2.28日,封城一个多月了,紧邻毕业期,我在家抽空学习一下C. 看到了变量的存储方式和生存期这一章节,下面就是我整理的内容 下面是用于理解静态局部变量这个概念所写的代码,主要是需要分析一下函 ...
- iOS开发系列--C语言之存储方式和作用域
概述 基本上每种语言都要讨论这个话题,C语言也不例外,因为只有你完全了解每个变量或函数存储方式.作用范围和销毁时间才可能正确的使用这门语言.今天将着重介绍C语言中变量作用范围.存储方式.生命周期.作用 ...
- (C/C++学习笔记) 九. 变量的存储类型
九. 变量的存储类型 ● 变量的存储类型(见附页) ● 注释 ①对于自动变量,它属于动态存储方式. 但是也可以用static定义它为静态自动变量,或称静态局部变量,从而成为静态存储方式.由此看来,一个 ...
- .Net - 线程本地变量(存储)的使用
关于C#多线程的文章,大部分都在讨论线程的开始与停止或者是多线程同步问题.多线程同步就是在不同线程中访问同一个变量或共享资源,众所周知在不使用线程同步的机制下,由于竞争的存在会使某些线程产生脏读或者是 ...
随机推荐
- mxGraph实现鱼骨图(因果图)(转自CSDN,链接附于文中)
鱼骨图由日本管理大师石川馨先生所发明,故又名石川图.鱼骨图是一种发现问题“根本原因”的方法,它也可以称之为“Ishikawa”或者“因果图”.其特点是简捷实用,深入直观.它看上去有些象鱼骨,问题或缺陷 ...
- S8-codelab02
import news_cnn_model import numpy as np import os import pandas as pd import pickle import shutil i ...
- go调查内存泄漏
curl x.x.x.x/debug/pprof/heap > base.heap 过段时间 curl x.x.x.x/debug/pprof/heap > current.heap go ...
- vue中less文件全局引用
1.先安装sass-resources-loader npm install sass-resources-loader 2.然后在build->utils.js修改less配置 在less ...
- ActiveMQ安装使用与spring整合配置教程
https://blog.csdn.net/qq_22075041/article/details/77602996
- linux下Vim文本编辑器的常用快捷键
Linux插入命令 a 在光标之后插入字符 A 把光标移动到行首尾进入插入模式 i 在光标之前插入字符 I 把光标移动到行首并进入插入模式 o 在光标下插入新行 O 在光标上插入新行 Linux定位 ...
- unity中给图片换颜色
slot边框.color = new Color32 (93,165,255,255);
- Selenium Extent Report的设置
Extent Report需要在线加载css,不然生成的html report会很难看. 但可以设置不在线加载css,而是使用本地css,在使用htmlreporter加上这句 htmlReporte ...
- Linq指令执行分析
Linq指令执行分析 一.Linq中IEnumerable的结构 Linq在执行聚合操作和ToXxx系统方法之前,一直都是一个数据源和一串指令(下面的讨论都是基于未执行聚合操作和ToXxx系统方法之前 ...
- java web项目由http转换成https遇到的各种坑
java web项目由http转换成https遇到的各种坑 这篇文章写给自己在经历项目由http转换成https遇到的各种坑所做的一份笔记,留给以后自己看,或者和开发的朋友也刚好遇到和我一样的问题的朋 ...