C/C++static关键字详解

文章目录

    • C语言中的static
      • 局部变量
      • 全局变量和函数
    • C++中的static
      • 类内声明,类外定义
      • 访问静态成员

static是一个非常重要的关键字,为什么呢,用法又多,说不定哪里来一下就给人整懵了,而且还比较复杂,有必要专门记录一下static的用法

static的意思是静态的

一开始在学习C语言时,我们时用它来控制变量和函数的作用域,也就是使用范围,后面学习到进程地址空间,才了解到他也改变了存储的区域

我们知道进程地址空间可以大致分为栈区、堆区、静态区

诶这个静态区是不是眼熟,没错

static修饰的变量都存在静态区,一直到程序结束时才会释放

额外bb一句,所有的常量也存在静态区

简单说,static修饰的对象无非就是变量和函数,但是变量和函数放的位置不一样,static的作用也不一样

C语言中的static

C语言中static一共有三个用法

  • 修饰局部变量->静态局部变量
  • 修饰全局变量->静态全局变量
  • 修饰函数->静态函数

局部变量

  1. 在局部变量中static修饰的变量只初始化一次,在之后调用这个函数的时候保留原来的状态
  2. 有点类似于全局函数的意思,但是延长了局部变量的生命周期,但是他的作用域还是在函数范围内
  3. 修改了他的存储位置,从栈区改到了静态区
  4. 如果static变量没有赋初值,则自动初始化为0,这一点也是类似于全局变量的

全局变量和函数

  1. 修改了全局变量的作用范围,以前的全局是真全局,整个项目中都能用(使用extern外部声明),生命周期贯穿程序
  2. static修饰之后只能在内部链接,说人话就是只能在这个文件中使用,别的文件extern了也不行

这里对函数和全局变量的限制是相同的,目前还没有什么区别

C++中的static

C++是兼容C语言的,所以C语言中的static的用法中C++是一样的

除了修饰上面的三个,static还可以修饰类内成员,包括类内成员变量和类内成员函数分别变成静态成员变量和静态成员函数

重点特性

  1. 静态成员是所有的该类实例化之后的实例所共享,不属于某个具体的实例
  2. 静态成员变量必须在类外定义,定义时不添加static关键字,相当于在类内是生命,类外是初始化
  3. 静态成员函数没有this指针,不能访问任何非静态成员,无论是变量还是函数
  4. 静态成员也有访问级别的限制,public、protected、private,可以有返回值

类内声明,类外定义

class A{
private:static int _a;
};
int A::_a = 114;

访问静态成员

class A{
public:static int _a;
public:static void int func(){}
};int main()
{A a;a._a;A::_a;A::func();A()._k;return 0;
}

上面的三种方式对于静态成员变量和静态成员函数都是适用的

注意:静态成员函数虽然在类内,但是无法调用其他非静态成员函数,不能使用静态成员变量,但是可以使用其他的静态成员函数

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1551191.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

javascript:监听浏览器页签切换

监听页面的可见性变化,在很多场景下非常实用,比如跟踪用户行为、节省资源、优化性能等。 1 代码示例 document.addEventListener("visibilitychange", () > {if (document.visibilityState "visible") {alert("当前页面已…

VUE 开发——Node.js学习(一)

一、认识Node.js Node.js是一个跨平台JavaScript运行环境,使开发者可以搭建服务器端的JavaScript应用程序 使用Node.js编写服务器端程序——编写数据接口、前端工程化; Node.js环境没有BOM和DOM; Node.js安装:下载node-v16.19…

聚观早报 | Redmi K80 Pro电池细节;vivo X200 Pro mini真机照

聚观早报每日整理最值得关注的行业重点事件,帮助大家及时了解最新行业动态,每日读报,就读聚观365资讯简报。 整理丨Cutie 9月30日消息 Redmi K80 Pro电池细节 vivo X200 Pro mini真机照 广汽集团正制订深化改革方案 蔚来中国获新一轮增…

敢不敢动手?AI绘画+表情包制作,7步搞定超萌表情!

在这个信息爆炸的时代,表情已经成为我们日常沟通中不可或缺的一部分。然而,过去制作个性化表情包不仅耗时费力,还需要掌握复杂的设计软件,如AE、AI、(Adobe Illustrator )、PS。然而,随着AI绘画技术的兴起&…

一天学习开发一个APP!PDF转Word文档,Power Platform也能搞定

之前,给大家分享了微软Power Platform开发课程——手把手教你搭建二维码识别器,大家都很感兴趣。听说,很多小伙伴对于PDF转Word文档有困扰,这期我们继续为大家分享Power Platform的开发能力与技巧,怎么通过Power Platf…

hex 文件和 bin 文件剖析

目录 一、概述二、hex 文件三、bin 文件 在单片机开发中,hex 文件和 bin 文件是非常常见的两种烧写文件格式。比如在 Keil 中,编译好程序后,点击 Download 就可以把 hex 文件烧录到板子上。 而有时候在我们实现 IAP 时,有需要生成…

jmeter中token测试

案例: 网站:http://shop.duoceshi.com 讲解:用三个接口来讲解 第一个接口code:GET http://manage.duoceshi.com/auth/code 第二个登录接口:http://manage.duoceshi.com/auth/login 第三个接口:http://…

探索SpringBoot:学科竞赛管理项目开发

2 相关技术简介 2.1Java技术 Java是一种非常常用的编程语言,在全球编程语言排行版上总是前三。在方兴未艾的计算机技术发展历程中,Java的身影无处不在,并且拥有旺盛的生命力。Java的跨平台能力十分强大,只需一次编译,任…

fish-speech语音大模型本地部署

文章目录 fish-speech模型下载编译部署 小结 fish-speech模型 先说下fish-speech模型吧,可以先看下官网。如下: 这就是一个模型,可以根据一个样例声音,构建出自己需要的声音。其实,这个还是有很多用途的;…

产品管理- 互联网产品(5):运营知识与技能

了解运营 1、运营的基础是产品认清受众,切实解决问题、用户需求 2、运营活动贯穿产品的整个生命周期 3、找准用户,建立MVP 4、明确产品的应用场景。用户在何场景下基于何种需求使用产品?务必短流程 5、AARRR模型 6、运营管理流程类似产品管理…

API版本管理秒杀ApiFox的ApiFirst对比功能雏形演示

文章目录 前言第一版对比功能说明视频演示 前言 目前市面上主流的API管理工具在版本管理上,个人觉得做的比较粗糙,无法很直观的体现出版本之间差异,还停留在api元数据的文本比较上。用户更希望在浏览API文档阅读模式时能像word标注一样&…

Sqlserver 连接 chche 数据库详细步骤

zihao 第一步,安装ODBC驱动 在windows资源管理器里粘贴以下地址,会进入到驱动文件夹 ftp://ftp.intersystems.com/pub/cache/odbc/2018/ 第二步,添加ODBC 安装后,可能需要重启。然后打开控制面板,搜素ODBC&#xf…

The legacy JS API is deprecated and will be removed in Dart Sass 2.0

The legacy JS API is deprecated and will be removed in Dart Sass 2.0 更新了sass版本后,启动项目控制台一直在报错,影响开发效率,强迫症表示忍受不了。 字面意思是:Sass在2.0版本将会移除legacy JS API,所以现在使…

【ESP 保姆级教程】小课设篇 —— 案例:20231219_基于 ESP32 TFT显示课程表

忘记过去,超越自己 ❤️ 博客主页 单片机菜鸟哥,一个野生非专业硬件IOT爱好者 ❤️❤️ 本篇创建记录 2024-09-30 ❤️❤️ 本篇更新记录 2023-09-30 ❤️🎉 欢迎关注 🔎点赞 👍收藏 ⭐️留言📝🙏 此博客均由博主单独编写,不存在任何商业团队运营,如发现错误,请…

Linux命令一文速通速成

目录 嵌入式Linux的组成 Linux的介绍 Linux和发行版本 Linux应用 Linux特点 Linux发行版 GNU Linux目录结构 为什么要使用Linux命令? 登录 ​编辑 说明 shell是什么? bash shell Linux命令格式 命令格式举例 命令中的其他组成 Linux系统…

基于SpringBoot的诗词学习网站的设计与实现

目录 毕设制作流程功能和技术介绍系统实现截图开发核心技术介绍:使用说明开发步骤编译运行代码执行流程核心代码部分展示可行性分析软件测试详细视频演示源码获取 毕设制作流程 (1)与指导老师确定系统主要功能; (2&am…

fastAPI教程:路由操作及HTTP请求响应

FastAPI 三、路由操作 3.1 路由装饰器 路由装饰器,也叫路径操作装饰器。 FastAPI提供了一系列基于HTTP请求作为方法名的装饰器给开发者用于绑定url地址提供给外界操作API接口。 HTTP方法FastAPI代码描述GETapp.get()async 方法名(): pass获取数据POSTapp.post(…

python15_转换为ASCII

转换为ASCII A A B 你好 C 66def str_to_ascii(s):# 如果输入是单个字符,直接返回其ASCII值if len(s) 1:return ord(s)# 否则返回每个字符的ASCII值列表return [ord(char) for char in s]def int_to_ascii(i):# 将整数转换为对应的ASCII字符return chr(i)if __…

光储一体化在停车场中的应用

近年来,光伏作为一种绿色环保无污染的可再生能源在中国的发展迅速。据统计,2022 全年光伏发电量为 4276 亿千瓦时,同比增长 30.8%,约占全国全年总发电量的 4.9%。然而,光伏发电也存在着不稳定性的问题,因此储能技术的发展成为克服…

AutoGen实现多代理-Tool_Use_and_Conversational_Chess(四)

1. 学习背景 如图,常见的Agent之间交流对话,可能会涉及到外部工具的调用和嵌套式聊天,这种设计模式就要求代理会使用工具和按序执行代码。本节尝试聊天机器人模拟人类进行下棋,如图所示,Chess Board代理则进行检测合…