定义和声明有什么区别:
举一个例子:
A),int a;B),extern int a;
那个是定义,那个是声明呢?或者都是定义,又或者都是声明。
这个问题,在我工作中和学习中,从来没有被教过和问过。
在计算机中,到底什么是定义,什么是声明,定义和声明的区别归根到底在哪?
先来说一下什么是定义:
所谓定义就是创建一个对象,为这个对象分配一块内存,同时给这块内存取一个名字,这个名字就是我们常说的对象名或变量名。但是注意,这个名字一旦和这块内存关联起来,他们就是一个整体,生死相依,不离不弃。并且这块内存的位置也不能被改变。一个对象或者变量,在一个区域内(全局,文件,函数,循环等)只能被定义一次,如果定义多次,编译器会提示你重复定义同一个变量或对象。
再来说一下声明:
第一层含义:告诉这个编译器,这个名字已经匹配到一块内存上路了,后面的代码用变量火女对象实在别的地方定义的。定义是原件,原件唯一有效,那么声明就像复印件,可以重复打印,可以多次声明。
第二层含义:告诉编译器,这个变量或者对象的名字已经被占用了,别的地方,不能在使用这个名字作为其他的变量或者对象名;比如在电影票,你买了一张票后提示他人该位置已经被其他上占用了。
这种声明最典型的例子就是函数参数的声明,例如:
int func(int a, char b);
这一样一疏理后,应该能够区分出:A是定义,B是声明。
那么到底什么是定义和声明的根本区别:是内存。
定义创建对象,并为这个对象分配了内存;而声明只是将与内存关联的对象名进行外域可见性的扩充,看不到,可以继续声明。