LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 411|回复: 0

指向结构的指针

[复制链接]
发表于 2024-2-20 23:32:45 | 显示全部楼层 |阅读模式
与任何其他类型的结构一样,结构可以通过其自己的指针类型指向:

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)


您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表