静态变量与静态函数

静态变量与静态函数堆与栈 1 栈区 stack 有编译器自动分配释放 存放函数的参数值 局部变量的值等 操作凡是类似于数据结构中的栈 2 堆区 heap 一般有程序员分配和释放 动态存储分配 分配方式类似于链表 3 全局区 static 全局变量和静态变量的存储 有系统释放 4 文字常量区 常量字符串存放 系统释放 5 程序代码区 存放函数体的二进制代码 堆与栈的区别 1 栈内存存

堆与栈

1、栈区(stack):由编译器自动分配释放,存放函数的参数值、局部变量的值等,操作是类似于数据结构中的栈;

2、堆区(heap):一般有程序员分配和释放(动态存储分配),分配方式类似于链表;

3、全局区(static):全局变量和静态变量的存储,由系统释放;

4、文字常量区:常量字符串存放,系统释放;

5、程序代码区:存放函数体的二进制代码。

堆与栈的区别:

1.栈内存存储的是局部变量而堆内存存储的是实体;

2.栈内存的更新速度要快于堆内存,因为局部变量的生命周期很短;

3.栈内存存放的变量生命周期一旦结束就会被释放,而堆内存存放的实体会被垃圾回收机制不定时的回收。

全局变量静态(static

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

2)初始化:未经初始化的静态全局变量会被程序自动初始化为0,普通全局变量未经初始化的值是任意的;

3)作用域:全局静态变量的只在声明它的文件下是可见的(从定义到文件结尾),普通全局变量在整个工程中是可见的。

优点:1)不会被其他文件访问和修改;2)其他文件使用相同的名字的变量不会发生冲突

局部静态变量

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

2)初始化:未经初始化的静态局部变量会被程序自动初始化为0,普通局部变量未经初始化的值是任意的;

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

static修饰局部变量时,修改了局部变量的存储位置,从原来的占中存储改为静态存储区。但是静态变量离开作用域后并没有被销毁,仍然驻留在内存中,知道程序结束,但是不能对其访问;

Static修饰全局变量时,它改变了全局变量的作用域,只在其声明的文件中可见,存储位置内有改变,仍在静态存储区中)

静态函数

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

1)静态函数在其他文件中科技定义形同的名字,不会发生冲突;

2)静态函数不能被其他文件所用;

3)静态函数会被自动分配在一个一直使用的存储区,直到退出应用程序实例,避免了调用函数时压栈出栈,速度快很多。

<1>static全局变量与普通的全局变量有什么区别:static全局变量只初使化一次,防止在其他文件单元中被引用;
<2>static局部变量和普通局部变量有什么区别:static局部变量只被初始化一次,下一次依据上一次结果值;
<3>static函数与普通函数有什么区别:static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝。

C++类中静态变量与静态函数

在类中,静态成员可以实现多个对象之间的数据共享,并且使用静态数据成员还不会破坏隐藏的原则,即保证了安全性。因此,静态成员是类的所有对象中共享的成员,而不是某个对象的成员。使用静态数据成员可以节省内存,因为它是所有对象所公有的,因此,对多个对象来说,静态数据成员只存储一处,供所有对象共用。静态数据成员的值对每个对象都是一样,但它的值是可以更新的。只要对静态数据成员的值更新一次,保证所有对象存取更新后的相同的值,这样可以提高时间效率。

1、静态变量的定义:静态数据成员定义或说明时在前面加关键词static

2、静态变量初始化:与一般成员初始化不同<数据类型><类名>::<静态数据成员名>=<>

(1) 初始化在类体外进行,而前面不加static,(这点需要注意)以免与一般静态变量或对象相混淆。

(2) 初始化时不加该成员的访问权限控制符privatepublic等。

(3) 初始化时使用作用域运算符来标明它所属类,因此,静态数据成员是类的成员,而不是对象的成员。

3、静态数据成员是静态存储的,它是静态生存期,必须对它进行初始化。

4、静态方法不能直接调用一般成员,可以通过对象引用实现调用

静态成员函数和静态数据成员一样,它们都属于类的静态成员,它们都不是对象成员。因此,对静态成员的引用不需要用对象名。在静态成员函数的实现中不能直接引用类中说明的非静态成员(原因是,非静态成员函数需要传入一个this指针),可以引用类中说明的静态成员(这点非常重要)。如果静态成员函数中要引用非静态成员时,可通过对象来引用。从中可看出,调用静态成员函数使用如下格式:<类名>::<静态成员函数名>(<参数表>);

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/207626.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 下午1:26
下一篇 2026年3月19日 下午1:27


相关推荐

  • C语言 整数与字符串的相互转换

    C语言 整数与字符串的相互转换C语言整数与字符串的相互转换一、简述C语言中整数与字符串的相互转换,有广泛应用的拓展函数(非标准库),也可以自己尝试简单的实现。二、整数转字符串1、拓展函数itoaitoa(表示integertoalphanumeric)是把整型数转换成字符串的一个函数。windows环境下,在&lt;stdlib.h&gt;头文件中有c…

    2022年6月6日
    49
  • eXtremeDB_5noobs

    eXtremeDB_5noobseXtremeDB™ 3.1fromMcObject®ReleaseNotesTargetOS:HP-UX11forPA-RISC,ItaniumHostOS:HP-UX11.xBYUSINGTHISSOFTWAREYOUAGREETOMcObject’s LICENSEAGREEMENT

    2022年10月14日
    4
  • Spring概述「建议收藏」

    Spring概述「建议收藏」Spring概述

    2022年4月22日
    55
  • clion激活_最新在线免费激活

    (clion激活)JetBrains旗下有多款编译器工具(如:IntelliJ、WebStorm、PyCharm等)在各编程领域几乎都占据了垄断地位。建立在开源IntelliJ平台之上,过去15年以来,JetBrains一直在不断发展和完善这个平台。这个平台可以针对您的开发工作流进行微调并且能够提供…

    2022年3月29日
    79
  • ui ue设计是什么_ui设计师

    ui ue设计是什么_ui设计师设计在我们的生活中扮演着重要的角色,但是面对越来越多的专业术语和相近的岗位职责,人们总是困惑:明明是差不多的岗位,为什么要整那么多的词。UI、UE、UID、UED相信很多人都弄不清楚这些名字是什么意思,到底有什么区别。其实,在它们神似的外表下,潜藏着巨大的差异。本文,就来详细说说UI设计和UE设计这是两种概念,以及如何将它们区分开来。一、UI、UE的定义1、UI:UserInterface…

    2022年4月19日
    81
  • ps入门视频全套教程零基础,ps教程百度云分享新手必看!「建议收藏」

    ps入门视频全套教程零基础,ps教程百度云分享新手必看!「建议收藏」链接:https://pan.baidu.com/s/1pQmEc-XgquF1jBXIoS6-Gg提取码:lcrw自学PS的第一步:安装软件!遇到过很多想学PS的伙伴,60%的新手都折在了软件安装这一步。新版PS一定比旧版好用,别听那些“大神”的言论,他们只是对曾经需要大力气去人工实现的功能被新版一键取代的感觉不爽罢了。第二步:想清楚学习PS的目的安装好PS,你就要想想学习PS的目的是啥了。如果你只是平时做个套版海报,帮女朋友P个照片,抠个图,免费的教程足够!但是..

    2022年8月29日
    6

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号