|
与任何其他类型的结构一样,结构可以通过其自己的指针类型指向:
struct movies_t {
string title;
int year;
};
movies_t amovie;
movies_t * pmovie;
这里是一个结构类型的对象,并且是指向结构类型的对象的指针。因此,以下代码也有效:amoviemovies_tpmoviemovies_t
1
pmovie = &amovie;
指针的值将被分配对象的地址。
现在,让我们看另一个混合指针和结构的例子,它将用于引入一个新的运算符:箭头运算符 ():pmovieamovie->
// pointers to structures
#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)
在 cpp.sh 上编辑和运行
箭头运算符 () 是一个取消引用运算符,专门用于指向具有成员的对象的指针。此运算符用于直接从对象的地址访问对象的成员。例如,在上面的示例中:->
pmovie->
就所有目的而言,等同于:
(*pmovie).
这两个表达式 和 都是有效的,并且都访问由名为 的指针指向的数据结构的成员。这绝对不同于:pmovie->title(*pmovie).titletitlepmovie
*pmovie.
这相当于:
*(pmovie.title)
这将访问由结构对象调用的假设指针成员所指向的值(事实并非如此,因为不是指针类型)。以下面板总结了指针和结构成员的运算符的可能组合:titlepmovietitle
表达 评估内容 等效
a.b 对象成员ba
a->b 指向的对象的成员ba (*a).b
*a.b 对象成员指向的值ba *(a.b)
|
|