变量的声明、变量的定义、变量的初始化

变量的声明:用于向程序表明变量的类型和名字。
变量的定义:用于为变量分配存储空间,还可以为变量指定初始值。
变量的初始化:为变量指定初始值。

广义上来说,变量的声明有两种情况:

  • 1.需要建立存储空间的声明。例如:int a,我们在声明的时候就建立的存储空间。
  • 2.不需要建立存储空间的声明。例如: extern int a,变量a 是在别的文件中定义的。

这里,第一种情况是定义性声明(defining declaration),因为这种情况的声明为变量创建了存储空间,所以是包含定义的。而第二种情况则是引用性声明(referncing declaration),这种情况的声明告诉了程序变量的类型和名字,以及告诉程序该变量的定义是在其他文件中。

从广义的角度来讲声明是包含定义,即定义是声明的一个特例,但是并非所有的声明都包含定义。例如:int a 它既是声明,同时又是定义。而 extern a 它只是声明不是定义。

一般的情况下,我们把建立空间的声明称之为定义,而把不需要建立存储空间的声明称之为声明

变量的初始化,就很简单了,为变量声明或者定义之后,赋上初始值的过程,就是变量的初始化。
int a只是对变量的定义,因为它并没有为a赋上初始值,所以它是不包含变量的初始化的。

int a = 100,这句语法就包含了变量的初始化,所以它既是变量的定义,也是变量的初始化。

当然,我们也可以分开写:

int b;  // 这是变量的定义
b = 20; // 这是为变量做初始化

例如:

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

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

我们声明的最终目的是为了提前使用,即在定义之前使用,如果不需要提前使用就没有单独声明的必要,变量是如此,函数也是如此,所以声明不会分配存储空间,只有定义时才会分配存储空间。

用static来声明一个变量的作用有二:

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

文中大部分内容转自:http://www.cnblogs.com/GavinDai/archive/2011/10/24/2222735.html

猜你喜欢

转载自blog.csdn.net/u011619283/article/details/88377863