运行一个完整的程序。我们可将整个存储区分为四块:

(1)栈区:就比如局部变量,对应的函数参数等这些,调用完之后相应的内存会自己释放掉,很让人省心。

(2)堆区:堆来堆去的。得要人动手。所以得我们自己手动去分配和释放。像malloc(c),new(c++) ,delete 一下等等。

(3)全局数据(静态区):全局变量和静态变量是放在一个窝里面的。静态变量如果没有初始化,系统会自动初始化的。虽然系统会自动初始化,但是分房间的时候还是得分清楚的。

    所以最终是初始化的全局变量和初始化的静态变量分在一块区域,即同一个房间。未初始化的全局变量和未初始化的静态变量分在一块。程序结束时释放。

(4)最后就是代码区了

staic主要由五种用法:

(a)如果用static修饰局部函数的变量。那么这个变量就是静态变量了。在主函数中,如果重复调用这个函数,那么里面的这个静态变量只会初始化一次。如果没有用static修饰,那么每次

   调用的时候都会对这个变量进行初始化。

(b)如果用static修饰全局的变量。那么在这个文件中所有的函数都可以使用这个变量。如果一个工程里面有a.c和b.c文件,static在a.c中定义的。那么b.c就用不了这个static修饰的变量。如

   果没有static修饰,只要加一个extern外部调用声明,就可以了。

(c)如果用static修饰全局函数,同上(b)。

以上三点是C++中的描述,在C中也同样适用。只是C++还多了两种情况。就是在类中的修饰。

(d)static修饰类中的变量。用static修饰之后,那么这个变量的内存就分配在了全局数据区了,并不和该类在同一片区域。所以static只会被初始化一次。

(e)static修饰类中的函数。那么该函数就变成了静态函数。静态函数不能访问非静态函数,非静态函数可以访问静态函数。访问静态函数可以用(.->),指针或者类名::三种方式访问。

转自 https://blog.csdn.net/majianfei1023/article/details/45290467

C++中static关键字的用法的更多相关文章

  1. C/C++中static关键字的用法

    1.什么是static? static 是C/C++中很常用的修饰符,它被用来控制变量的存储方式和可见性. 1.1static的引入 我们知道在函数内部定义的变量,当程序执行到它的定义处时,编译器为它 ...

  2. c++中static关键字的用法总结

    类中的静态成员真是个让人爱恨交加的特性.我决定好好总结一下静态类成员的知识点,以便自己在以后面试中,在此类问题上不在被动. 静态类成员包括静态数据成员和静态函数成员两部分. 一 静态数据成员: 类体中 ...

  3. 关于Java中static关键字的用法以及从内存角度解析

    在Java中,static可以用来修饰成员变量和成员方法. 修饰成员变量,称为静态成员方法 修饰静态方法,称为静态成员方法 搞清楚用法和区别之前,先搞清static声明的变量和普通非静态变量在内存的分 ...

  4. java中static关键字的作用

    java中static关键字主要有两种作用: 第一:为某特定数据类型或对象分配单一的存储空间,而与创建对象的个数无关. 第二,实现某个方法或属性与类而不是对象关联在一起 简单来说,在Java语言中,s ...

  5. c#多线程中Lock()关键字的用法小结

    本篇文章主要是对c#多线程中Lock()关键字的用法进行了详细的总结介绍,需要的朋友可以过来参考下,希望对大家有所帮助     本文介绍C# lock关键字,C#提供了一个关键字lock,它可以把一段 ...

  6. C++中typename关键字的用法

    我在我的 薛途的博客 上发表了新的文章,欢迎各位批评指正. C++中typename关键字的用法

  7. 解读typescript中 super关键字的用法

    解读typescript中 super关键字的用法 传统的js,使用prototype实现父.子类继承.如果父.子类有同名的方法,子类去调用父类的同名方法需要用 “父类.prototype.metho ...

  8. 【转】Java中static关键字用法总结

    1.     静态方法 通常,在一个类中定义一个方法为static,那就是说,无需本类的对象即可调用此方法 声明为static的方法有以下几条限制: · 它们仅能调用其他的static 方法. · 它 ...

  9. 【java_需阅读】Java中static关键字用法总结

    1.     静态方法 通常,在一个类中定义一个方法为static,那就是说,无需本类的对象即可调用此方法 声明为static的方法有以下几条限制: · 它们仅能调用其他的static 方法. · 它 ...

随机推荐

  1. Docker获取镜像报错docker: Error response from daemon

    docker: Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled ...

  2. orm 锁 和 事务

    一 锁 锁的语句 select_for_update() 原生sql语句select * from t1 for update django 语句models.T1.objects.select_fo ...

  3. Linux 常用工具openssh之ssh

    前言 ssh是openssh套件中的客户端连接工具,可以给予ssh加密协议实现安全的远程登录服务器 语法 ssh (选项) (参数) 选项 -:强制使用ssh协议版本1: -:强制使用ssh协议版本2 ...

  4. Linux文件内容重定向

    文件描述符 可以理解为linux跟踪打开文件,而分配的一个数字,这个数字有点类似c语言操作文件时候的句柄,通过句柄就可以实现文件的读写操作. 用户可以自定义文件描述符范围是:3-num,这个最大数字, ...

  5. 看完这篇文章,再次遇到Jedis「Redis客户端」异常相信你不再怕了!

    本文导读: [1] 疫情当前 [2] 应用异常监控 [3] Redis客户端异常分析 [4] Redis客户端问题引导分析 [5] 站在Redis客户端视角分析 [6] 站在Redis服务端视角分析 ...

  6. gRPC in ASP.NET Core 3.x -- Protocol Buffer(2)Go语言的例子(下)

    第一篇文章(大约半年前写的):https://www.cnblogs.com/cgzl/p/11246324.html gRPC in ASP.NET Core 3.x -- Protocol Buf ...

  7. TensorFlow 中的张量,图,会话

    tensor的含义是张量,张量是什么,听起来很高深的样子,其实我们对于张量一点都不陌生,因为像标量,向量,矩阵这些都可以被认为是特殊的张量.如下图所示: 在TensorFlow中,tensor实际上就 ...

  8. 永久解决AndroidStudio Aapt2的问题

    https://blog.csdn.net/qq_37280248/article/details/80142260 修改电脑c://user/王明 中文名去掉 https://www.jb51.ne ...

  9. Go语言实现:【剑指offer】翻转单词顺序列

    该题目来源于牛客网<剑指offer>专题. 例如,"student. a am I",正确的句子应该是"I am a student." Go语言实 ...

  10. redis命令总结与持久化

    上篇redis文章为大家介绍了redis与它的部署工作.这次我们来说一下redis的操作命令与持久化 一.命令总结 1)String操作 6379> set k1 v1 #设定值 6379> ...