static关键字

局部变量

  1. 局部变量

    局部变量是最常见的量,编译器不会对其进行初始化,除非对其显式赋值,不然初始值是随机的。

    普通局部变量存储在栈空间,使用完毕后会立即被释放。

  2. 静态局部变量

    静态局部变量由static修饰,申明时就必须初始化,就算未被初始化编译器也会将它初始化为0。静态局部变量存储于进程全局数据区,即使函数返回,他的值也不会变。

    1. void f(){
    2. int n = 0;
    3. cout<<n<<endl;
    4. n++;
    5. cout<<n<<endl;
    6. cout<<"------------"<<endl;
    7. }
    8. void S(){
    9. static int n = 0;
    10. cout<<n<<endl;
    11. n++;
    12. cout<<n<<endl;
    13. cout<<"------------"<<endl;
    14. }

    函数S与f唯一的不同就是n为局部静态变量,但是S结束后n的值被保留,f结束后n被释放。

    全局变量

    全局变量定义在函数体外部,编译器会自动对其进行初始化并且将其存储在栈区。

    普通全局变量对整个工程可见,即其他文件使用extern外部申明后可直接使用。也就是说其它文件中不能再有名字相同的变量了。

    静态全局变量只针对本文件可见,其他文件无法访问。

    使用静态全局变量可使该变量只在本文件中可见,能有效降低程序模块的耦合,且不会误会使用

    静态函数

    静态函数与静态全局变量相似,在其他文件中不可见。普通函数在另一个文件中甚至不需要extern就能被使用。

    面向对象

    静态数据成员

    在类内数据成员申明前加上static,就成了静态数据成员。有如下特点:

    • 静态数据成员存储在全数据区,在定义时分配存储空间,因此不能在类中定义。
    • 静态数据成员是类的成员,无论定义了多少类的对象,只有一份拷贝,且对所有类的对象可见。对于非静态数据成员,有多少类的对象就有多少分拷贝。
    • 静态数据成员不属于任何类,在没有对象(类的实例)时,就能对其进行操作。
    • 静态数据成员初始化格式: 数据类型 类名::静态数据成员名 = 值;
    • 类的静态数据成员的两种访问方式: 类名.静态数据成员名 或者 类名::静态数据成员名

    静态数据成员相对全局变量的优势

    1. 不会进入命名空间,不与其他文件的变量名冲突
    2. 静态数据成员可以是private的

    静态成员函数

    与静态数据成员相似,静态成员函数不依附于类的对象,特性如下:

    1. 静态成员函数没有this指针,不能访问类的非静态数据成员,也不能访问类的非静态成员函数,它只能调用其他的静态成员函数。
    2. 出现在类体外的函数定义不能指定关键字static。
    3. 非静态成员函数可以自由访问静态数据成员和静态成员函数。

参考链接:

  1. c语言中static关键字用法详解

C++面试常见问题——09static关键字的更多相关文章

  1. C++面试常见问题——08const关键字

    const 类内定义 类型名 函数名(参数列表) const{ ​ //函数体: } 类外定义 类内申明 类型名 函数名(参数列表): 类外定义 类型名 类名::函数名(参数列表){ ​ //函数体: ...

  2. 2019最新最全Java开发面试常见问题答案总结

    2019最新最全Java开发面试常见问题答案总结 马上准备9月份出去面试Java开发,自己学习丢西瓜捡芝麻,学了的都忘了,所以有机会自己做个学习笔记,摘录自各个博文以及总结. 1.JAVA面向对象的特 ...

  3. Java后台面试 常见问题

    Java后台面试 常见问题   从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米.百度.阿里.京东.新浪.CVTE.乐视家的研发岗offer.我找的是java后台开发,把常见的问题分享 ...

  4. C++面试常见问题——01预处理与宏定义

    C++面试常见问题--------01预编译和宏的使用 C++预处理器 预处理器是一些指令,它将指示编译器在实际编译之前需要完成的预处理.预处理必须要在对程序进行词法与语义分析.代码生成与优化等通常的 ...

  5. MySQL索引知识点&面试常见问题

    来源:BiggerBoy 作者:北哥 原文链接:https://mp.weixin.qq.com/s/fucHvdRK5wRrDfBOo6IBGw 大家好我是北哥,今天整理了MySQL索引相关的知识点 ...

  6. python 常忘代码查询 和autohotkey补括号脚本和一些笔记和面试常见问题

    笔试一些注意点: --,23点43 今天做的京东笔试题目: 编程题目一定要先写变量取None的情况.今天就是因为没有写这个边界条件所以程序一直不对.以后要注意!!!!!!!!!!!!!!!!!!!!! ...

  7. C++ 复习要点、面试常见问题总结

    本文总结一下C++面试时常遇到的问题.C++面试中,主要涉及的考点有: 关键字极其用法,常考的关键字有const, sizeof, typedef, inline, static, extern, n ...

  8. JAVA工程师面试常见问题集锦

    集锦一: 一.面试题基础总结 1. JVM结构原理.GC工作机制详解 答:具体参照:JVM结构.GC工作机制详解     ,说到GC,记住两点:1.GC是负责回收所有无任何引用对象的内存空间. 注意: ...

  9. java 美团面试常见问题总

    一 基础篇 1. System.out.println(3|9)输出什么? 2. 说一下转发(Forward)和重定向(Redirect)的区别 3. 在浏览器中输入url地址到显示主页的过程,整个过 ...

随机推荐

  1. #P2341 [HAOI2006]受欢迎的牛 题解

    题目描述 每头奶牛都梦想成为牛棚里的明星.被所有奶牛喜欢的奶牛就是一头明星奶牛.所有奶 牛都是自恋狂,每头奶牛总是喜欢自己的.奶牛之间的“喜欢”是可以传递的——如果A喜 欢B,B喜欢C,那么A也喜欢C ...

  2. <c:foreach>指定循环次数

    <c:forEach begin="0" end="4" var="i"> <c:set var="ans&qu ...

  3. 本周总结(19年暑假)—— Part7

    日期:2019.8.25 博客期:113 星期日

  4. 配置<welcome-file>为自定义路径

    welcome-file是web.xml中的一个配置,其作用是配置启动项目时默认跳转的欢迎页面,一般我们会将其指定为一个静态页面. 那如果我们要将自定义的请求路径作为欢迎页面该怎么做呢? 1.配置we ...

  5. 十九 Spring的JDBC模版使用: 模版的CRUD的操作

    Spring的JDBC模版使用: 模版的CRUD的操作 保存操作 修改操作 删除操作 查询操作 import com.ithheima.jdbc.domian.Account; @RunWith(Sp ...

  6. ASC码速记

    ASCII表规则记忆 我们仅仅要记住了一个字母或数字的 ASCII 码 (比如记住 A 为 65 , 0 的 ASCII 码为 48 ), 知道对应的大写和小写字母之间差 32. 0 -- 32 按键 ...

  7. linux 查看Apache Tomcat日志访问IP前10

    访问日志名:localhost_access_log.2019-01-29.txt 日志格式示例 /Nov/::: +] /Nov/::: +] /Nov/::: +] /Nov/::: +] /No ...

  8. P1095 解码PAT准考证

    1095 解码PAT准考证 (25分)   PAT 准考证号由 4 部分组成: 第 1 位是级别,即 T 代表顶级:A 代表甲级:B 代表乙级: 第 2~4 位是考场编号,范围从 101 到 999: ...

  9. css解决字段不换行

    1.自动换行 <div style="widht:100%;height:100%;word-wrap: break-word">啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊 ...

  10. Verilog有符号整型数(signed int)比大小

    本文参考了https://blog.csdn.net/wenxinwukui234/article/details/42119265/ 关于2进制补码的思考和讨论. ================= ...