声明:只是规定了变量的类型和名字,而没有进行内存分配。
定义:不仅规定了变量的类型和名字,而且进行了内存分配,也可能会对量进行初始化。
初始化:当对象在创建时获得了一个特定值。
赋值:擦除原有的值,并赋予新值。
int a; //声明并定义a
extern int a; //extern表示声明但不定义a。
extern int a = 2; //任何包含了显示初始化的声明就成了定义
int a = 2; //初始化
a = 3; //赋值
一个小细节
对于int a = 2;我们可以很明显地分析这句话是声明并定义了变量a,并将a初始化为2。
但是对于int a;这句代码,我们该怎么分析呢?
首先这句代码声明并定义了a,但是它到底有没有进行初始化呢?
还记得我之前说定义有可能初始化么,其实这个初始化不仅包括显式初始化,而且包括默认初始化。
但是默认初始化又与变量的类型和变量所在的位置有关:
当变量为自定义类类型:
调用自身的默认构造函数进行初始化。
当变量为内置类型时:
该变量定义在函数体外时,将被初始化为0。
该变量定义在函数体内时,将不会进行初始化。
所以对于int a;这行代码是否进行初始化,还跟其所在的位置有关。