我们先来了解一下,什么是定义?什么是声明?它们有何区别?
举个例子:
a) int i;
b) extern int i;(关于extern,后面解释)
哪个是定义?哪个是声明?或者都是定义或者都是声明???
什么是定义:所谓的定义就是(编译器)创建一个对象,然后为这个对象分配一块内存并给它
取上一个名字,这个名字就是我们经常所说的变量名或对象名.但注意,这个名字一旦和
这块内存匹配起来(可以想象是这个名字嫁给了这块空间,没有要彩礼啊.^_^),它们就同
生共死,终生不离不弃.并且这块内存的位置也不能被改变.一个变量或对象在一定的区
域内(比如函数内,全局等)只能被定义一次,(想象一下,如果可以定义好几次,那就是有多个不同的内存空间叫同一个名字,那么将来我们通过对变量的操作带来很大的麻烦)如果定义多次,编译器会提示你重复定义同一个变量或对象.
什么是声明:有两重含义,如下:
第一重含义:告诉编译器,这个名字已经匹配到一块内存上了(伊人已嫁,吾将何去何
从?何以解忧,唯有稀粥),下面的代码用到变量或对象是在别的地方定义的.声明可以出
现多次.
第二重含义:告诉编译器,我这个名字我先预定了,别的地方再也不能用它来作为变量
名或对象名.比如你在图书馆自习室的某个座位上放了一本书,表明这个座位已经有人预
订,别人再也不允许使用这个座位.其实这个时候你本人并没有坐在这个座位上.这种声
明最典型的例子就是函数参数的声明,例如:
void fun(int i, char c);好,这样一解释,我们可以很清楚的判断:a)是定义;b)是声明.
那他们的区别也很清晰了.记住,定义声明最重要的区别:定义创建了对象并为这个
对象分配了内存,声明没有分配内存(一个抱伊人,一个喝稀粥.^_^).