当前位置:  编程技术>c/c++/嵌入式

解析static在C和C++中的用法以及区别

    来源: 互联网  发布时间:2014-10-19

    本文导语:  static主要有三个作用:(1)局部静态变量(2)外部静态变量/函数(3)静态数据成员/成员函数 前两种C和C++都有,第三种仅在C++中有,下面分别作以下介绍: 一、局部静态变量在C/C++中, 局部变量按照存储形式可分为三种auto, static, regis...

static主要有三个作用:
(1)局部静态变量
(2)外部静态变量/函数
(3)静态数据成员/成员函数
前两种C和C++都有,第三种仅在C++中有,下面分别作以下介绍:

一、局部静态变量
在C/C++中, 局部变量按照存储形式可分为三种auto, static, register。其中register不常用到,下面主要说说auto和static的区别。

1. 存储空间分配和生存周期不同
auto类型局部变量就是普通的局部变量(不加修饰的局部变量默认为该类型)。该类型局部变量存储在栈上,在动态存储区,生命周期仅限于定义它的函数,函数结束,它就自动释放。static类型局部变量存储在静态存储区,在程序整个运行期间都不释放。两者之间的作用域相同,但生存期不同。

2. static局部变量在所处模块在初次运行时进行初始化工作,且只操作一次。

3. 对于局部静态变量,如果不赋初值,编译期会自动赋初值0或空字符,而auto类型的初值是不确定的。(对于C++中的class对象例外,class的对象实例如果不初始化,则会自动调用默认构造函数,不管是否是static类型)

特点: static局部变量的”记忆性”与生存期的”全局性”

二、外部静态变量/函数
在C中 static有了第二种含义:用来表示不能被其它文件访问的全局变量和函数。但为了限制全局变量/函数的作用域, 函数或变量前加static使得函数成为静态函数。但此处“static”的含义不是指存储方式,而是指对函数的作用域仅局限于本文件(所以又称内部函 数)。注意此时, 对于外部(全局)变量, 不论是否有static限制, 它的存储区域都是在静态存储区,生存期都是全局的. 此时的static只是起作用域限制作用, 限定作用域在本模块(文件)内部.使用内部函数的好处是:不同的人编写不同的函数时,不用担心自己定义的函数,是否会与其它文件中的函数同名。

三、静态数据成员/成员函数(C++特有)
C+ +重用了这个关键字,并赋予它与前面不同的第三种含义:表示属于一个类而不是属于此类的任何特定对象的变量和函数. 这是与普通成员函数的最大区别,也是其应用所在, 比如在对某一个类的对象进行计数时, 计数生成多少个类的实例,就可以用到静态数据成员. 在这里面, static既不是限定作用域的, 也不是扩展生存期的作用, 而是指示变量/函数在此类中的唯一性. 这也是”属于一个类而不是属于此类的任何特定对象的变量和函数”的含义. 因为它是对整个类来说是唯一的,因此不可能属于某一个实例对象的. (针对静态数据成员而言, 成员函数不管是否是static, 在内存中只有一个副本, 普通成员函数调用时, 需要传入this指针, static成员函数调用时, 没有this指针. )


    
 
 

您可能感兴趣的文章:

  • windows下tinyxml.dll下载安装使用(c++解析XML库)
  • C++配置文件解析 C++ Configurator
  • oracle iis7站长之家
  • xerces c++解析中文的问题
  • C++ 的 XML 解析器 slimxml
  • C++ 解析器线程的传播库 libpondyparser
  • C++的JSON解析类 JSONVALUE
  • C++命令行参数解析器 CLPP
  • C++多文件变量解析
  • 如何用C、C++解析HTTP请求报文,包括协议头,字符编码,请高手赐教。谢谢。
  • c++中#include <>与#include""的区别详细解析
  • C++空类默认函数详细解析
  • 解析C++浮点数无效值的定义与无效值判定的小结
  • linux 系统下c++ 用expat解析xml文件
  • C++标准库中sstream与strstream的区别详细解析
  • C与C++ 无参函数的区别解析
  • C++中overload,override,overwrite的区别详细解析
  • 解析使用C++编写无错代码的方法技巧
  • 解析C++ 浮点数的格式化显示
  • C++实现判断字符串是否回文实例解析
  • 解析c++中的默认operator=操作的详解
  • html中<radio>单选按钮控件标签用法解析及如何设置默认选中
  • java之super关键字用法实例解析
  • html中<checkbox>标签用法解析及如何设置checkbox复选框的默认选中状态
  • c#中switch case的用法实例解析
  • html中<select>标签用法解析及如何设置select的默认选中状态
  • python中enumerate的用法实例解析
  • java之static关键字用法实例解析
  • 解析一个有关sizeof用法的题目--sizeof(i++)
  • c_str()的用法详细解析
  • jquery .attr()与.prop()用法解析
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • C语言static修饰函数详细解析
  • static全局变量与普通的全局变量的区别详细解析
  • php static延迟静态绑定实例解析
  • C语言中auto,register,static,const,volatile的区别详细解析
  • C语言基础知识点解析(extern,static,typedef,const)
  • 使用libpcap读取tcpdump抓取的文件并解析c代码实例
  • 请教redhat9下什么命令执行arp解析和逆向arp解析
  • 基于Python的Html/xml解析库Beautiful Soup 4.2.1发布
  • 如何用libxml2 默认解析器解析HTML文件
  • Python下Html/xml解析库Beautiful Soup快速入门教程
  • linux能否成为动态域名解析客户端的动态域名解析服务器?
  • 基于Python的html解析库:pyquery最新版主页及pyquery下载
  • 配置DNS服务器后,服务器可解析,客户端不能解析。求解
  • python下xml解析库lxml最新版下载安装以及代码示例
  • 为什么我在使用nslookup命令的时候,正向解析(域名-》ip)没有问题,反向解析(ip-》域名)怎么查不到呢?
  • python对XML的解析方法(SAX,DOM,ElementTree)介绍
  • 服务器本机能解析域名,其它机子都解析不到,能ping通dns服务器地址,是什么问题?//
  • php通过pack和unpack函数实现对二进制数据封装及解析
  • 我有一个DNS服务器,既要解析自己局域网里IP,有要解析外网上的IP,如www.163.com,我该如何设置呢
  • 请问怎样手工的解析XML文件啊.( 不借助任何的xml解析器)急!!!
  • 通过shell解析文件,并根据解析内容生成新的文件。
  • java 公式解析 表达式解析 expression-analyzer
  • 请问各位:我用SUN公司的JAXP开发包解析XML文档,可不知道对XML解析后如何将结果写回文件中。请各位熟悉Java和XML的高手帮忙。
  • java解析xml之jdom解析xml示例分享
  • java解析xml之dom解析xml示例分享
  • java解析xml之dom4j解析xml示例分享


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3