数据结构(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;

 

现在,让我们看一个包含有指针和结构体的例子,这里我们将引入一个新的操作符——箭头操作符(->):

 

#include <iostream>
#include <string>
#include <sstream>

using namespace std;

struct movies_t
{ string title; int year; };
int main () { string mystr; movies_t amovie; movies_t * pmovie; pmovie = &amovie; cout << "Enter title: "; getline (cin, pmovie->title); cout << "Enter year: "; getline (cin, mystr); (stringstream) mystr >> pmovie->year; cout << "\nYou have entered:\n"; cout << pmovie->title; cout << " (" << pmovie->year << ")\n"; return 0; }
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)



posted on 2014-03-26 14:38  guozqzzu  阅读(396)  评论(0编辑  收藏  举报