博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于C/C++中,对static关键字的理解
阅读量:6379 次
发布时间:2019-06-23

本文共 1445 字,大约阅读时间需要 4 分钟。

准备知识:C/C++的内存分布

对于一个完整的程序,在内存中的分布情况如下:  

1.栈区: 由编译器自动分配释放,像局部变量,函数参数,都是在栈区。会随着作用域退出而释放空间。
2.堆区:程序员分配并释放的区域,像malloc(c),new(c++) 
3.全局数据区(静态区):内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static 变量。程序结束释放。

4.代码区

在不同的语言环境、或者同一语言不同上下文环境中,static关键字具有不同的意思。

1、C语言中

1.1 声明为static的变量具有以下三部分特性:

 1)存储位置:存储于静态内存中

 2)创建与作用域:静态变量在程序运行之前创建,在程序的整个执行期间始终存在。

 3)初始化取值

1.2 类型

1.2.1 静态全局变量:

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

  2)初始化:未经初始化的全局静态变量会被程序自动初始化为0(自动对象的值是任意的,除非他被显示初始化)
  3)作用域:全局静态变量在声明他的文件之外是不可见的,不能被其他文件所共享。准确地讲从定义之处开始到文件结尾。
好处:
定义全局静态变量的好处:
<1>不会被其他文件所访问,修改
<2>其他文件中可以使用相同名字的变量,不会发生冲突。

1.2.2静态局部变量:

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

  2)初始化:未经初始化的全局静态变量会被程序自动初始化为0(自动对象的值是任意的,除非他被显示初始化)
  3)作用域:作用域仍为局部作用域,当定义它的函数或者语句块结束的时候,作用域随之结束。

1.2.3 静态函数

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

定义静态函数的好处:
 1)其他文件中可以定义相同名字的函数,不会发生冲突
 2) 静态函数不能被其他文件所用。 

2、C++中

2.1静态数据成员

在类内数据成员的声明前加上关键字static,该数据成员就是类内的静态数据成员.

1)存储位置:静态数据成员存储在全局数据区

2)初始化:在类体外进行初始化。<数据类型><类名>::<静态数据成员名>=<值> 

3)静态数据成员被当作是类的成员。无论这个类的对象被定义了多少个,静态数据成员在程序中也只有一份拷贝,由该类型的所有对象共享访问。

4)访问方式:<类对象名>.<静态数据成员名> 或 <类类型名>::<静态数据成员名>

5)在没有产生类的实例时,也可以访问静态数据成员

因为静态数据成员在全局数据区分配内存,属于本类的所有对象共享,所以,它不属于特定的类对象,在没有产生类对象时其作用域就可见,即在没有产生类的实例时,我们就可以操作它; 

2.2静态成员函数

特点:

1)非静态成员函数可以任意地访问静态成员函数和静态数据成员; 

2) 静态成员函数不能访问非静态成员函数和非静态数据成员; 

3)由于没有this指针的额外开销,因此静态成员函数与类的全局函数相比速度上会有少许的增长; 

4)调用静态成员函数,可以用成员访问操作符(.)和(->)为一个类的对象或指向类对象的指针调用静态成员函数,也可以直接使用如下格式:
<类名>::<静态成员函数名>(<参数表>)

5)出现在类体外的函数定义不能指定关键字static;

转载于:https://www.cnblogs.com/Miss-Bueno/p/7625462.html

你可能感兴趣的文章
区块链,目前人类史上最高的维度。
查看>>
我们在目前的21世纪,IT互联网能做什么,我们又该怎么去选择
查看>>
Oracle体系架构(一)--总介
查看>>
Oracle SQL的硬解析和软解析
查看>>
文件查找
查看>>
我的友情链接
查看>>
Linux关闭不必要的端口从而关闭不必要的服务
查看>>
鸡蛋学运维-6:nginx服务安装配置
查看>>
HTML FORM 简要介绍
查看>>
SSH免密码登录实现
查看>>
hellxman像侦探一样去做***测试
查看>>
软件评测-信息安全-应用安全-资源控制-用户登录限制(上)
查看>>
我的友情链接
查看>>
Linux 内存机制
查看>>
SELinux入门:了解和配置SELinux
查看>>
linux 引导方式systemd upstart sysV
查看>>
漂浮广告代码
查看>>
如何建立批处理文件(.bat或.cmd)
查看>>
升级Kibana到3.0
查看>>
三张图片同时切换效果
查看>>