您的位置:首页 > 理论基础 > 数据结构算法

数据结构(Data structures)(二):结构体指针

2014-03-26 14:38 197 查看

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)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: