现代C:概念剖析和编程实践
上QQ阅读APP看书,第一时间看更新

2.3 定义

通常,声明只指定标识符所引用的对象的类型,而不是标识符的具体值,也不指定在何处可以找到它所引用的对象。这个重要的角色由一个定义C来填补。

要点2.5 声明指定标识符,而定义指定对象。

稍后我们会看到,在现实生活中事情会更复杂一些,但是现在我们可以简化一下,我们总是初始化变量。初始化是一种语法结构,它扩大了声明并为对象提供一个初始值。例如:

026-01

i的声明,其初始值为0

在C语言中,这种带有初始化的声明也用相应的名称定义了对象,也就是说,指示编译器提供存储变量值的存储空间。

要点2.6 对象在初始化的同时被定义。

我们的盒子可视化现在可以用一个值来完成,在这个例子中是0

026-02

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

026-03

这将A中的5项分别初始化为9.02.90.00.000073.0E+25,顺序如下:

027-01

我们在这里看到的初始化形式称为指定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

对于一个函数,如果它的声明后面跟着一个包含函数代码的大括号{...},那么我们有一个定义(而不是只有一个声明):

027-02

到目前为止,在我们的示例中,我们已经看到了两个不同特性及其名称:对象CiA函数Cmainprintf。与对象或函数声明不同,对于同一标识符允许有多个对象或函数的声明,对象或函数的定义必须是唯一的。也就是说,对于一个可操作的C程序,所使用的任何对象或函数都必须有一个定义(否则执行时将不知道去哪里寻找它们),并且必须只有一个定义(否则执行可能变得不一致)。

要点2.9 每个对象或函数必须只有一个定义。


[1]稍后我们将看到这些带点(.)和指数(E+25)的数字是如何工作的。