3.8.2 用struct把变量结合在一起
struct(结构)是把一组变量组合成一个构造的一种方式。一旦创建了一个struct,就可以生成所建立的新类型变量的许多实例。例如:
struct的声明必须以分号结束。在main()中,创建了两个Structure1的实例:s1和s2。它们每一个都有各自独立的c、i、f和d版本。所以s1和s2表示了完全独立的变量块。要在s1或s2中选择一个元素,应该使用一个‘.’,使用C++class对象的语法就是前面看到的那样,因为class对象是由struct演化而来的,所以struct是语法的来源。
注意这是使用Structure1的不便之处(正如所指出的那样,只是在C中需要,而不是C++)。在C中,当定义变量时,不能只说Structure1,必须说struct Structure1。这就是在C中使用typedef特别方便的地方。
当定义s1和s2时(但是注意它只有数据和特征,并不包括行为,这就是在C++中得到的真正的对象),通过这样使用typedef,可以假定Structure2是一个像int或float一样的内建类型(这是在C中;而在C++中,可以试图去掉typedef),我们将会看到,struct标识符已经脱离了原来的目的,因为这里的目的是创造typedef。当然,有时候可能需要早定义结构是使用struct。这时,可以重复struct的名字,就像struct名和typedef一样:
如果看一下这个程序,会看到sr1和sr2互相指向且每个都拥有一块数据。
实际上,struct的名字不必和typedef的名字相同,但是,一般使用相同的名字,为了使得事物更加简单。
3.8.2.1 指针和struct
在上面的例子中,所有的struct都当做对象处理。但是,像任何一片存储空间一样,可以取得一个struct的地址(正如在上面的程序SelfReferential.cpp中看到的那样)。如上所述,为了选择一个特定struct对象中的元素,应当使用‘.’。但是,如果有一个指向struct对象的指针,可以使用一个不同的运算符‘->’来选择对象中的元素。下面是一个例子:
在main()中,struct指针sp最初指向s1,用‘->’选择s1中的成员来初始化它们。随后sp指向s2,以同样的方式初始化那些变量。所以可以看到指针的另一个好处是可以动态地重定向它们,指向不同的对象,使编程更灵活。
到现在为止,这就是对struct需要了解的全部,但是随着本书的进展,我们会更自如地使用它们(特别是它们更有潜力的继任者—类)。