C++变量存储区域及其作用域

C++ 静态全局变量与普通全局变量 一、存储区域: 1、栈:由编译器在需要的时候分配,在不需要的时候自动清除的变量的存储区域。通常存储局部变量,函数参数。 2、堆:由new分配的内存块,需要手动释放。如果程序员没有手动释放,在程序运行结束后,操作系统自动回收。 3、自由存储区:由malloc等分配的内存块,与堆相似,用free来释放。 4、全局/静态存储区:用来存放全局变量和静态变量。在C中,全局变量区分初始化的和未初始化的 阅读详情

变量可以分为:全局变量、静态全局变量、静态局部变量和局部变量。
        按存储区域分,全局变量、静态全局变量和静态局部变量都存放在内存的静态存储区域,局部变量存放在内存的栈区。
        按作用域分,全局变量在整个工程文件内都有效;静态全局变量只在定义它的文件内有效;静态局部变量只在定义它的函数内有效,只是程序仅分配一次内存,函数返回后,该变量不会消失;局部变量在定义它的函数内有效,但是函数返回后失效。
        全局变量和静态变量如果没有手工初始化,则由编译器初始化为0。局部变量的值不可知。当编译一个C++程序时,计算机的内存被分成了4个区域,一个包括程序的代码,一个包括所有的全局变量,一个是堆栈,还有一个是堆(heap),我们称堆是自由的内存区域,我们可以通过new和delete把对象放在这个区域。你可以在任何地方分配和释放自由存储区。

局部静态变量

在局部变量之前加上关键字static,局部变量就被定义成为一个局部静态变量。

1)内存中的位置:静态存储区

2)初始化:未经初始化的全局静态变量会被程序自动初始化为0(自动对象的值是任意的,除非他被显示初始化)

3)作用域:作用域仍为局部作用域,当定义它的函数或者语句块结束的时候,作用域随之结束。

[注]当static用来修饰局部变量的时候,它就改变了局部变量的存储位置,从原来的栈中存放改为静态存储区。但是局部静态变量在离开作用域之后,并没有被销毁,而是仍然驻留在内存当中,直到程序结束,只不过我们不能再对他进行访问。

全局静态变量

   在全局变量之前加上关键字static,全局变量就被定义成为一个全局静态变量。

   1)内存中的位置:静态存储区(静态存储区在整个程序运行期间都存在)

   2)初始化:未经初始化的全局静态变量会被程序自动初始化为0(自动对象的值是任意的,除非他被显示初始化)

   3)作用域:全局静态变量在声明他的文件之外是不可见的。准确地讲从定义之处开始到文件结尾。

[注]当static用来修饰全局变量的时候,它就改变了全局变量的作用域(在声明他的文件之外是不可见的),但是没有改变它的存放位置,还是在静态存储区中。

静态函数

在函数的返回类型前加上关键字static,函数就被定义成为静态函数。

函数的定义和声明默认情况下是extern的,但静态函数只是在声明他的文件当中可见,不能被其他文件所用。

静态数据成员

   1) 内存中的位置:静态存储区

   2) 初始化和定义:

       <1> 静态数据成员定义时要分配空间,所以不能在类声明中定义。

       <2> 静态数据成员在程序中只能提供一个定义,所以静态数据成员的初始化不能在类的头文件中。

   3) 访问:

       <1> 类对象名.静态数据成员

       <2> 类类型名::静态数据成员

   4) 说明:

       a.static数据成员和普通数据成员一样遵public, protected, private 访问规则。

       b.对于非静态数据成员,每个类对象都有自己的拷贝。静态数据成员被当作类的全局对象,无论这个类的对象被定义了多少个,静态数据成员在程序中也只有一份拷贝,由该类类型的所有对象共享访问。

   5) 同全局对象相比,使用静态数据成员有两个优势:

       <1> 静态数据成员没有进入程序的全局名字空间,因此不存在与程序中其他全局名字冲突的可能性。

       <2> 可以实现信息隐藏。静态成员可以是private成员,而全局对象不能。

   6 )静态数据成员的“唯一性”本质(独立于类的任何对象而存在的唯一实例),使他能够以独特的方式被使用,这些方式对于非static数据成员来说是非法的。

静态成员函数

1)声明:在类的成员函数返回值之前加上关键字static,他就被声明为一个静态成员函数。静态成员函数不能声明为const或volatile,这与非静态成员函数不同。

2) 定义:出现在类体外的函数定义不能指定关键字static。

3) 作用:主要用于对静态数据成员的操作

4) 静态成员函数与类相联系,不与类的对象相联系。

5)静态成员函数不能访问非静态数据成员。因为非静态数据成员属于特定的类实例。

6)静态成员函数没有this指针,因此在静态成员函数中隐式或显示的引用这个指针都将导致编译时刻错误。试图访问隐式引用this指针的非静态数据成员也会导致编译时刻错误。

7)访问:可以用成员访问操作符(.)和箭头(->)为一个类对象或指向类对象的指针调用静态成员函数,也可以用限定修饰符名直接访问或调用静态成员函数,而无需声明类对象。

全志 mipi屏幕和触摸驱动调试记录 mipi屏幕与触摸调试记录 阅读详情

相关推荐

XCP_Basic 移植步骤

XCP_Basic 移植步骤

ggzzc的博客 2315

C/C++程序内存的各种变量存储区域和各个区域详解

C语言在内存中一共分为如下几个区域,分别是:1. 内存栈区: 存放局部变量名;2. 内存堆区: 存放new或者malloc出来的对象;3. 常数区: 存放局部变量或者全局变量的值;4. 静态区: 用于存放全局变量或者静态变量;5. 代码区:二进制代码。知道如上一些内存分配机制,有助于我们理解指针的概念。C/C++不提供垃圾回收机制,因此需要对堆中的数据进行及时销毁,防止内存泄漏,使用free和de...

jirryzhang的博客 8万+

峰值电流模式CCM BUCK的传递函数推导

电流内环闭环传递函数: Gci(s)=i^L(s)v^comp(s)=FmGid(s)1+KRiHe(s)FmGid(s)=1Ri11+s[mcL+(0.5VIN−Vo)RiVINRifSW]+s21(πfSW)2 G_{ci}(s)=\frac{\hat i_{L}(s)}{\hat v_{comp}(s)}=\frac {F_mG_{id}(s)}{1+KR_iH_e(s)F_mG_{id}(s)}=\frac{1}{R_i}\frac{1}{1+s[\frac{m_cL+(0.5V_{IN}-V_o)

c007106333的博客 2354

【 C/C++】变量在内存里的存储区域

C/C++语言在内存中一共分为如下几个区域,分别是: 内存栈区: 编译期间就能确定存储大小,运行时自动分配释放。存放函数的参数值、返回地址、局部变量的值等。在函数作用域内创建,在离开作用域后自动销毁。.esp 始终指向栈顶, 栈中的数据越多, esp的值越小。其操作方式类似于数据结构中的栈。 存储空间是连续的,两个紧密挨着定义的局部变量,他们的存储空间也是紧挨着的。栈的大小是有限的,通常Visual C++编译器的默认栈的大小为1MB,所以不要定义int a[1000000]这样的超大数组。 内存堆

maoyeahcom的博客 1782

ZLMediaKit源码分析(二)推流创建

ZLMediaKit推流结构体创建是在RtspSession::onRecv()之后。如何触发onRecv()请参考上一篇文章这里不在赘述。

cliffordl的专栏 5068

SATA硬件电路设计实战:从接口规范到高速布线技巧

本文深入探讨了SATA硬件电路设计的核心要点与实战技巧。从接口物理电气规范、AC耦合电容与阻抗控制等基础,到FPGA/SoC高速收发器选型配置,再到应对6Gbps高速信号的PCB布局布线艺术,系统性地解析了SATA电路设计中的关键挑战与解决方案,助力工程师规避常见陷阱,实现稳定可靠的存储接口设计。

tech5的博客 530

c++中变量的存储位置及其作用域

变量可以分为:全局变量、静态全局变量、静态局部变量和局部变量。 按存储区域分,全局变量、静态全局变量和静态局部变量都存放在内存的静态存储区域,局部变量存放在内存的栈区。 按作用域分,全局变量在整个工程文件内都有效;静态全局变量只在定义它的文件内有效;静态局部变量只在定义它的函数内有效,只是程序仅分配一次内存,函数返回后,该变量不会消失;局部变量在定义它的函数内有效,但是函数返回后失效。 全局

lu1012123053的专栏 802

01 AUTOSAR CP标准文档阅读指南

01 AUTOSAR CP标准文档阅读指南

汽车软件工程师 | 好奇博主 | 处女座 1134

C/C++中关于变量的存储位置

内存分配区域 32位操作系统下为:1G内核态,3G用户态 BSS段 :通常是指用来存放程序中 未初始化的全局变量、静态变量(全局变量未初始化时默认为0)的一块内存区域 数据段 :通常是指用来存放程序中 初始化后的全局变量和静态变量 代码段 :通常是指用来存放程序中 代码和常量 堆 :通常是指用来存放程序中 进程运行时被动态分...

浮生流年的博客 6177

从打印攻击到视频重放:手把手用OULU-NPU训练你的第一个活体检测模型

本文详细介绍了如何使用OULU-NPU数据集训练活体检测模型,以应对打印攻击和视频重放等安全威胁。通过PyTorch框架,从环境准备、数据加载、预处理到模型架构设计,手把手教你构建一个高效的双流网络,结合CNN和LSTM技术,提升模型在多种攻击场景下的检测准确率。

weixin_29092031的博客 384

家人们,谁懂啊,dify又报错了:[models] Bad Request Error, 500 Server Error:Internal Server Error for url: http://

本来今天下班,坐在地铁上,一身劳累。一起上班的小兄弟儿,突然甩来一张截图:老大!dify又报错了。没办法,一到家就打开电脑,开始排查。

xiezhipu的博客 882

C++中各种类型的变量的存储区域和作用域

C++中各种类型的变量的存储区域和作用域 变量有:全局变量、静态全局变量、静态局部变量、局部变量。 按照存储区域分,全局变量,静态全局变量和静态局部变量都是存储在内存的静态存储区域的,局部变量存放在内存的栈区。而按照作用域来,全局变量在整个程序文件中有效,静态全局变量只在定义它的文件中有效,静态局部变量只在定义它的函数内有效,程序分配一次内存,函数返回后任然有效,直到程序结束才销毁,局部变量只

dxw2011的专栏 1975

PX4从放弃到精通(二十二):日志

文章目录前言一、下载日志二、ulog转CSV三、利用flightplot软件分析PX4的ulog日志1 windos安装2 ubuntu18.04安装四、使用PlotJuggler分析PX4日志五、设置日志记录条件六、添加自定义日志消息 前言 PX4 1.10以上固件 QGC 一、下载日志 将飞控链接地面站,在下图页面点击“刷新”,即可看到保存的日志(前提是要有TF卡) 选择需要下载的日志,点击右侧的“下载”,然后选择目录即可进行下载,如果想擦除所有的日志,可以点击右侧的“擦除全部” 二、ulog转CS

超维空间科技的博客 6792

[C++] 变量存储区域及其作用域【转】

WilliamSugar的专栏 602

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

C++变量作用域,存储区

在C++中,存储区域可以分为:堆,栈,常数区,静态区,代码区; 堆: 栈:局部变量(定义它的函数内有效) 常数区: 静态区:全局变量(整个程序文件中有效),静态全局变量(定义它的文件中有效),静态局部变量(定义它的函数内有效,整个程序文件存在) 代码区:   全局变量:存储在静态存储区,整个程序运行区间都存在;初始化:如果没有初始化,那么自动初始化为0;作用域:整个程序运行期间。 ...

C++初学者 271

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

C++各种变量及区别

C++各种变量及区别

Serven的博客 1万+

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

C++随笔-名称空间

C++中的声明区域、潜在作用域、作用域 声明区域:允许对某变量进行声明的区域 潜在作用域:是声明区域的子集。从某变量声明处开始,到某变量声明结束为止,都是某变量的潜在作用域。 作用域:是某变量潜在作用域的子集,为程序中,某变量实际可见的区域范围。 由此可见,只要在不同的声明区域对变量进行声明,就能将该变量加入相应的声明区域,进一步得到相应的该变量的作用域。而通过对变量在不同声明区域以及使用不...

ZerinHwang 234

C++中的存储区域

一个由C/C++编译的程序占用的内存分为以下几个部分 1.栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清楚的变量的存储区。里面的变量通常是局部变量、函数参数等。 2.堆,就是那些由new分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制,一般一个new就要对应一个delete。如果程序员没有释放掉,那么在程序结束后,操作系统会自动回收。 3.全局(静态)存储区:存放...

wk_bjut_edu_cn的博客 927

C++变量及存储区域小结

一.C++存储区域: 1.堆: 在程序中new出来的变量放在堆中,只能由指针来操作,需要用delete去释放。 2.栈:局部变量,函数的形参放在栈中,在栈中的数据都是生命周期已知的。 3.全局区(静态去):全局变量和静态变量是放在这里面的。程序结束后由系统释放 4.常量区

donway8700的专栏 492

static 变量 作用域 全局变量 局部变量 外部变量 常量 volatile变量

作用域 全局变量 局部变量 静态变量 外部变量 常量 volatile变量 作用域: 作用域规则告诉我们一个变量的有效范围,它在哪儿创建,在哪儿销毁(也就是说超出了作用域)。变量的有效作用域从它的定义点开始,到和定义变量之前最邻近的开括号配对的第一个闭括号。也就是说,...

209

const、static变量存放位置 解析

参考 博客01:https://blog.youkuaiyun.com/fayery/article/details/26505771 博客02:https://blog.youkuaiyun.com/qq_43152052/article/details/99306967 一、博客01 我们将以下面的例子介绍const变量和static变量的存放位置: static int val_a = 1; // 初始化的静态变量...

博雅勇士的博客 4347

c++ static

一、首先介绍以下全局变量、局部变量、静态局部变量、静态全局变量:   C++变量根据定义位置的不同,具有不同的作用域,作用域可分为6种:全局作用域,局部作用域,语句作用域,类作用域,命名作用域和文件作用域。 从作用域看: 全局变量具有全局作用域。全局变量只需在一个源文件中定义,就可以作用于所有的源文件。当然,其他不包括全局变量定义的源文件需要用extern关键字再次声明这个全局变量。

wangzhiqing3的专栏 723

C++中的全局变量、普通局部变量和静态局部变量的区别

在C++中,我们经常难以说清楚全局变量、局部变量和静态局部变量的区别。本博客从变量存储特性和标识符作用域两个角度区分这三个变量。 首先,我们来看看C++程序的内存区域是如何分配的。 从上图,我们可以看到,C++程序的内存区域分为代码区、全局数据区、堆区和栈区。其中,全局变量和静态局部变量存放在全局数据区,这两个变量在程序开始时就已经分配和初始化存储空间了。而普通局部变量存放在栈区,它在程序...

weixin_30871293的博客 176

c/c++ static关键字详解

static关键字

小匠码农 2077

【C++】static 变量详解-变量篇

static修饰变量的话,有两点要注意。1.变量的存储区域在全局区,不管变量是在函数体内,class内,还是cpp文件内。2.变量的作用域在离它最近的{}内部,出了{}之外,不可以使用。...

zhghost的专栏 622

经验1 局部变量与全局变量的区别

一、存储位置 1、只读区域:存储常量和变量,例如下面的*p指针,一般是不允许改变的。 2、全局、静态存储区:在C语言中,全局变量分为初始化和未初始化的全局变量,初始化的全局变量和静态变量存储在data区,未初始化的全局变量和静态变量存储在bss区,而c++没有区分,他们占有共同区域。例如下面 的var、unvar、static_var、static_var1这些。 3、自由存储区:自由存储区

liuhuashui123的专栏 603
上一篇: C/C++静态成员变量和静态成员函数
下一篇: 10.21-HW北研面试及LXLT公司面试总结
devilkin64
博客等级 码龄19年 16粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值