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

变量定义与声明的区别详细解析

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

    本文导语:  我们在程序设计中,时时刻刻都用到变量的定义和变量的声明,可有些时候我们对这个概念不是很清楚,知道它是怎么用,但却不知是怎么一会事,下面我就简单的把他们的区别介绍如下: 变量的声明有两种情况:(1) 一种是需要...

我们在程序设计中,时时刻刻都用到变量的定义和变量的声明,可有些时候我们对这个概念不是很清楚,知道它是怎么用,但却不知是怎么一会事,下面我就简单的把他们的区别介绍如下:

变量的声明有两种情况:
(1) 一种是需要建立存储空间的(定义、声明)。例如:int a在声明的时候就已经建立了存储空间。

(2) 另一种是不需要建立存储空间的(声明)。例如:extern int a其中变量a是在别的文件中定义的。

前者是"定义性声明(defining declaration)"或者称为"定义(definition)",而后者是"引用性声明(referncing declaration)"。从广义的角度来讲声明中包含着定义,但是并非所有的声明都是定义,例如:int a它既是声明,同时又是定义。然而对于extern a来讲它只是声明不是定义。一般的情况下我们常常这样叙述,把建立空间的声明称之为"定义",而把不需要建立存储空间称之为"声明"。很明显我们在这里指的声明是范围比较窄的,也就是说非定义性质的声明。

例如:在主函数中

代码如下:

int main()
{
extern int A; //这是个声明而不是定义,声明A是一个已经定义了的外部变量
  //注意:声明外部变量时可以把变量类型去掉如:extern A;
dosth();  //执行函数
}

int A;//是定义,定义了A为整型的外部变量(全局变量)


外部变量(全局变量)的"定义"与外部变量的"声明"是不相同的,外部变量的定义只能有一次,它的位置是在所有函数之外,而同一个文件中的外部变量声明可以是多次的,它可以在函数之内(哪个函数要用就在那个函数中声明)也可以在函数之外(在外部变量的定义点之前)。系统会根据外部变量的定义(而不是根据外部变量的声明)分配存储空间的。对于外部变量来讲,初始化只能是在"定义"中进行,而不是在"声明"中。所谓的"声明",其作用,是声明该变量是一个已在后面定义过的外部变量,仅仅是在为了"提前"引用该变量而作的"声明"而已。extern只作声明,不作定义。

用static来声明一个变量的作用有二:
(1) 对于局部变量用static声明,则是为该变量分配的空间在整个程序的执行期内都始终存在
(2) 外部变量用static来声明,则该变量的作用只限于本文件模块


    
 
 

您可能感兴趣的文章:

  • C++多文件变量解析
  • static全局变量与普通的全局变量的区别详细解析
  • c/c++中变量的声明和定义深入解析
  • 指向变量的常指针与指向常变量的指针详细解析
  • PHP标记风格、注释、表单获取、字符串类型、变量解析的实例解析
  • 解析VC中创建DLL,导出全局变量,函数和类的深入分析
  • 全局变量与局部变量在内存中的区别详细解析
  • PHP变量作用域与地址引用问题解析
  • sql 表变量与临时表的实例解析
  • 头文件不宜定义变量的原因全面解析
  • Linux线程管理必备:解析互斥量与条件变量的详解
  • c/c++预处理命令之预定义变量
  • 枚举类型变量如何定义与初始化,如何给该变量加入新值?
  • 大家快来帮帮我,关于JAVA的类变量:一定在定义成STATIC变量(即静态变量)吗?
  • Linux能否自定义系统变量一如windows里的系统环境变量可以"新建"一样
  • 既然在定义实例变量的时候可以初始化实例变量的值,那还要构造函数干吗?谢谢!
  • linux内核怎么定义汇编全局变量及在c文件中使用这个变量?有关0。11下的字符回显
  • 类静态变量能定义在成员方法中吗?? 在线
  • 下面的变量我都下了定义,为什么还出现没定义的信息
  • 变量定义的怪现象
  • Java中怎样定义全局变量???
  • 有谁说说jsp中的变量与函数定义
  • 在JBUILDER中如何使用全局变量,最好举一个例子。我也不知道在哪里定义全局变量?
  • jsp中怎样定义全局变量
  • Makefile中的变量先使用后定义的问题
  • 在Qt中,不知道如何定义结构变量-struct?
  • 在linux下,如何查询系统的预定义变量?
  • 在驱动中定义变量能多大
  • linux内核全局变量定义问题!
  • QT下如何定义全局变量
  • 一个包含文件引起的变量重复定义的问题,高手请援助!
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • php中检测变量是否是一个对象的is_object函数介绍及用法举例
  • 将父类变量强制赋予子类变量时,发生了什么?比如子类的成员变量,假如父类中有不存在子类中有的成员变量的情况,那么子类中该变量是否默认取值???
  • Linux下如何查看,设置环境变量并立即生效
  • 请问在win2000的环境变量中,administrator的用户变量与系统变量有什么区别??
  • c++的boost库多线程(Thread)编程(线程操作,互斥体mutex,条件变量)详解
  • 实例变量和类变量
  • jsp中的变量和javascript中的变量可以比较吗
  • shell编程,如何将变量中的环境变量转换为绝对值
  • 程序中获取的环境变量能够根据Linux系统中相应环境变量而变化吗?
  • C#:(变量)字段和局部变量的作用域冲突
  • 如何清空session变量的值,或者删除一个session变量
  • 全局结构体变量和全局结构体指针变量
  • 动态库中的变量(全局和自动变量)在什么地方存储,内存在什么位置分配?
  • 菜鸟问题:如何设置application变量和session变量?
  • 怎么查看自己的shell的环境变量,和root的环境变量,solaris系统
  • linux动态链接库里全局变量和静态变量会导致动态库不可重入吗?
  • linux 下设置环境变量 使用了setenv 和putenv 在程序结束以后 发现变量又变回去了
  • 请问:环境变量的值 一般前面加$就可以了,但有时又用{}将环境变量括起来,它们有什么区别啊?
  • 如何将字符型变量转化为InputStream型变量?
  • 怎样把char型变量转换成String型变量?
  • 编程语言 iis7站长之家


  • 站内导航:


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

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

    浙ICP备11055608号-3