变量定义和声明的区别

电子常识

2637人已加入

描述

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

  1.变量的定义

  变量的定义用于为变量分配存储空间,还可以为变量指定初始值。在一个程序中,变量有且仅有一个定义。

  2.变量的声明

  用于向程序表明变量的类型和名字。程序中变量可以声明多次,但只能定义一次。

  3、变量作用域

  变量的作用域由声明它的位置决定。如果在过程中声明变量,则只有该过程中的代码可以访问或更改变量值,此时变量具有局部作用域并被称为过程级变量。如果在过程之外声明变量,则该变量可以被Script中所有过程所识别,称为Script级变量,具有Script级作用域。

  4.为什么需要区分声明和定义?

  C++程序通常由许多文件组成。为了让多个文件访问相同的变量,C++区分了声明和定义。任何在多个文件中使用的变量都需要既有定义又有声明。在这种情况下,在一个文件中定义了变量,在其他使用改变了的文件中则只能包含变量的声明(不能再包含定义,因为变量只能定义一次)。

  5.变量的声明两种情况

  (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 只作声明,不作任何定义。

  6.变量定义和声明的区别

  (1)定义也是声明,因为当定义变量时我们也向程序表明了它的类型和名字;

  (2)但声明不是定义,可以通过使用extern关键字声明变量而不定义它。不定义变量的声明包括对象名、对象类型和对象类型前的关键字extern;

  例:

  extern int i;//声明但不定义

  int i;//声明也定义

  extern声明不是定义,也不分配存储空间。事实上,它只是说明变量定义在程序的其他地方。

  注意:如果声明有初始化式,那么它可被当作是定义,此时声明也是定义了,即使声明标记为extern,

  例如:extern double pi = 3.1416;//声明也定义,此句话虽然使用了extern,但是这条语句还是定义了pi,分配并初始化了存储空间。

  注意:只有当extern声明位于函数外部时,才可以含有初始化式。

  注意:因为初始化的extern声明已经是定义了,而变量在程序中只能定义一次,所以对该变量随后的任何定义都是错误的:

  extern double pi = 3.1416;//定义了

  double pi;//重定义,不合法

  注意:在C++语言中,变量必须仅能定义一次,而且在使用变量之前必须定义或声明变量。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分