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



转载于:https://www.cnblogs.com/guozqzzu/p/3625577.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值