数据结构(Data structures)(二):结构体指针
Pointers to structures
像其它数据类型一样,结构体也可以有指针。可以被它自己的类型的指针所指向。其规则同其它基本数据类型一样:
struct movies_t{
string title;
int year;
};
movies_t amovie;
movies_t* pmovie;
这里 amovie 是一个结构体 movies_t 的对象,而pmovie 是一个指向结构体movies_t 的对象的指针。所以,同基本数据类型一样,以下表达式也是正确的:
pmovie = &amovie;
现在,让我们看一个包含有指针和结构体的例子,这里我们将引入一个新的操作符——箭头操作符(->):
|
Enter title: Invasion of the body snatchers
Enter year: 1978
You have entered:
Invasion of the body snatchers (1978)
|
上面的代码中引入了一个重要的操作符:->。这是一个间接引用操作符,常与结构体或类的指针一起使用,以便引用其中的成员元素,例如:
pmovie -> title;
与语句:
(*pmovie).title;
是等价的。
以上两种表达式 pmovie ->title 和 (*pmovie).title 都是合法的,都表示取指针pmovie 所指向的结构其元素title 的值。我们要清楚将它和以下表达区分开:
*pmovie.title;
它等价于:
*(pmovie.title);
表示取结构pmovie 的元素title 作为指针所指向的值,这个表达式在本例中没有意义,因为title本身不是指针类型。
下表中总结了指针和结构组成的各种可能的组合:
表达式 | 描述 | 等价于 |
pmovie.title | 结构体pmovie 的元素title | |
pmovie->title | 指针pmovie 所指向的结构体其元素title 的值 | (*pmovie).title |
*pmovie.title | 结构体pmovie 的元素title 作为指针所指向的值 | *(pmovie.title) |