结构指针(Pointers to structures) 就像其它数据类型一样,结构也可以有指针。其规则同其它基本数据类型一样:指针必须被声明为一个指向结构的指针: struct movies_t { char title [50]; int year; }; movies_t amovie; movies_t * pmovie; 这里 amovie 是一个结构类型movies_t 的对象,而pmovie 是一个指向结构类型movies_t 的对象的指针。所以,同基本数据类型一样,以下表达式正确的: pmovie = &amovie; 下面让我们看另一个例子,它将引入一种新的操作符:
pmovie->title 来代替: (*pmovie).title 以上两种表达式pmovie->title 和 (*pmovie).title 都是合法的,都表示取指针pmovie 所指向的结构其元素title 的值。我们要清楚将它和以下表达区分开: *pmovie.title 它相当于 *(pmovie.title) 表示取结构pmovie 的元素title 作为指针所指向的值,这个表达式在本例中没有意义,因为title本身不是指针类型。 下表中总结了指针和结构组成的各种可能的组合:
结构嵌套(Nesting structures) 结构可以嵌套使用,即一个结构的元素本身又可以是另一个结构类型。例如: struct movies_t { char title [50]; int year; } struct friends_t { char name [50]; char email [50]; movies_t favourite_movie; } charlie, maria; friends_t * pfriends = &charlie; 因此,在有以上声明之后,我们可以使用下面的表达式: charlie.name maria.favourite_movie.title charlie.favourite_movie.year pfriends->favourite_movie.year (以上最后两个表达式等价) 本节中所讨论的结构的概念与C语言中结构概念是一样的。然而,在C++中,结构的概念已经被扩展到与类(class)相同的程度,只是它所有的元素都是公开的(public)。在后面的章节4.1“类”中, 我们将进一步深入讨论这个问题。 5.6 自定义数据类型 (User defined data types) 前面我们已经看到过一种用户(程序员)定义的数据类型:结构。除此之外,还有一些其它类型的用户自定义数据类型: 定义自己的数据类型 (typedef) C++ 允许我们在现有数据类型的基础上定义我们自己的数据类型。我们将用关键字typedef来实现这种定义,它的形式是: typedef existing_type new_type_name; 这里 existing_type 是C++ 基本数据类型或其它已经被定义了的数据类型,new_type_name 是我们将要定义的新数据类型的名称。例如: |