
2.3 定义
通常,声明只指定标识符所引用的对象的类型,而不是标识符的具体值,也不指定在何处可以找到它所引用的对象。这个重要的角色由一个定义C来填补。
要点2.5 声明指定标识符,而定义指定对象。
稍后我们会看到,在现实生活中事情会更复杂一些,但是现在我们可以简化一下,我们总是初始化变量。初始化是一种语法结构,它扩大了声明并为对象提供一个初始值。例如:

是i
的声明,其初始值为0
。
在C语言中,这种带有初始化的声明也用相应的名称定义了对象,也就是说,指示编译器提供存储变量值的存储空间。
要点2.6 对象在初始化的同时被定义。
我们的盒子可视化现在可以用一个值来完成,在这个例子中是0
:

A
稍微复杂一些,因为它有几个组成部分:

这将A
中的5
项分别初始化为9.0
、2.9
、0.0
、0.00007
和3.0E+25
,顺序如下:

我们在这里看到的初始化形式称为指定C:一对带有整数的方括号,用来指定使用相应的值初始化数组中的哪一项。例如,[4] = 3.E+25
将数组A
的最后一项设置为值3.E+25
。作为一个特殊规则,初始化中未列出的任何位置都设置为0
。在我们的示例中,缺失的[2]
用0.0
填充[1]。
要点2.7 初始化设定中缺少的元素的默认值为0
。
你可能已经注意到,对于第一个元素,数组位置(即索引C)不是以1
开头,而是以0
开头。将数组位置视为对应的数组元素与数组开始处的距离。
要点2.8 对于一个有n
个元素的数组,第一个元素的索引为0
,最后一个元素的索引为n-1
。
对于一个函数,如果它的声明后面跟着一个包含函数代码的大括号{...}
,那么我们有一个定义(而不是只有一个声明):

到目前为止,在我们的示例中,我们已经看到了两个不同特性及其名称:对象C,i
和A
;函数C,main
和printf
。与对象或函数声明不同,对于同一标识符允许有多个对象或函数的声明,对象或函数的定义必须是唯一的。也就是说,对于一个可操作的C程序,所使用的任何对象或函数都必须有一个定义(否则执行时将不知道去哪里寻找它们),并且必须只有一个定义(否则执行可能变得不一致)。
要点2.9 每个对象或函数必须只有一个定义。
[1]稍后我们将看到这些带点(.
)和指数(E+25
)的数字是如何工作的。