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

4.static关键字和const关键字的作用【高频】

1. static 关键字

用static可以声明 静态变量,它存储在静态存储区中,它的生命周期 在整个程序运行期间 都存在。

  • 静态局部变量:

    • 参考之前

  • 静态全局变量:

    • 参考之前

  • 类中的静态成员

    在类中,被static声明的成员称为静态成员,包括 静态成员变量 和 静态成员函数:

    • 静态成员变量:

      • 该变量 属于这个类本身 而不是 某一个对象,所有的对象 共享这个变量

      • 在类内声明,在类外初始化

      • 和静态局部变量不一样,它的值是可以被多次赋值的

    • 静态成员函数:

      • 同理,表示所有对象 共享这个函数

      • 它内部可使用的变量也有限制:没有this指针,只能访问 静态成员变量

      • 静态成员函数的调用可以不通过创建 类的实例,而是直接通过 类名 调用

      • 它不能被声明为const、volatile和虚函数

  • 多线程

    • static变量 如果被 多线程 访问,需要特别注意 线程安全 问题

img

img

2. const关键字

  • 用const可以声明 常量变量,使变量不能被修改,且在定义时必须初始化

  • const形参可以接收const和非const实参

  • 类内:

    • const修饰成员变量:不能在类外初始化,必须在构造函数初始化列表中初始化。

    • const修饰成员函数:不能改变变量的值(除非用mutable修饰过)

    • const修饰对象:const对象只能调用const成员函数;非const对象都可以调用

  • 可以用于定义 常量指针指针常量

    • 常量指针 表示这个指针所指向的是一个常量。我们不能通过这个指针 来修改它所指向的值,但是指针本身的值,也就是 它所指向的地址 是可以改变的(const在*p之外)

      #include "stdio.h"
      void main(void)
      {
      	int const *p=NULL;//常量指针 //等效于 const int*p=NULL;
      	int a=10;
      	p=&a;//进行地址赋值
      	printf("%#x--%#x\r\n",p,&a);//打印地址值
      	printf("%d--%d\r\n",a,*p);//打印数据值
      } 
    • 指针常量 是指 指针本身是常量,也就是说 一旦被初始化,它所指向的地址 就不可更改了。但是 它所指向的数据是可以被修改的(const在*P之间)

      #include <stdio.h>
      int main(void)
      {
      	int a=10;
      	int *const p=&a;//初始化时赋值a的地址 //即int *(const p)=&a;
      	*p=20;
      	printf("%#x--%#x\r\n",p,&a);
      	printf("%d--%d\r\n",a,*p);
      }
    • 也可以同时使用 两个const关键字 来修饰 指针,使得它既是 常量指针,又是 指针常量,也就是 它所指向的数据 不能被修改,同时 它本身的值 也不能被修改

  • const也具有隐蔽性,被const修饰的变量不能被其他文件使用(链接都是内部的,所以其他文件也可以定义相同的名字的变量;而且头文件也可以包含const变量,但不能包含全局变量)

3. 有时候 static 和 const 可以组合使用,如 static const 变量,表示一个静态的常量

总之,static 用于 创建类的静态成员,const 用于 定义常量

相关文章:

  • 算法思想-动态规划算法
  • Vue的项目创建以及项目目录与组合式API
  • 快速入门——状态管理VueX
  • 动态规划(背包问题)--是否逆序使用的问题--二进制拆分的问题
  • linux /var/log/syslog过大问题及解决 Systemd定时器用于清除
  • 深入理解 `Sinks.Empty<Void>` 和 `Mono<Void>`:如何触发完成信号并结合 WebSocket 示例
  • axios、axios二次封装、api解耦
  • CF 58A.Chat room(Java实现)
  • 【ProtoBuf】proto3语法(一)
  • ctfshow——版本控制泄露源码
  • OPPO高级大模型算法岗内推
  • LeetCode 热题100 141. 环形链表
  • linux 打包解压命令
  • 计算机毕业设计SpringBoot+Vue.js个性化图书推荐系统(源码+LW文档+PPT+讲解+开题报告)
  • KubeSphere安装mysql
  • WebSocket简单介绍 并接入deepseek
  • 高并发内存池的thread cache部分实现及测试
  • linux-c 字节序问题--大小端
  • C语言学习笔记-初阶(13)scanf介绍
  • 监听其他音频播放时暂停正在播放的音频
  • 中学院新校区建设专题网站/下载百度app
  • 做卡盟网站/2022近期时事热点素材
  • 养老院服务质量建设专项网站/百度交易平台
  • 桐城市美好乡村建设办公室网站/seo整站优化服务教程
  • 做介绍自己的短视频网站/在百度上怎么卖自己的产品
  • WordPress子站站群/百度网站免费优化软件下载