zoukankan      html  css  js  c++  java
  • 数据结构(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 << " You have entered: "; cout << pmovie->title; cout << " (" << pmovie->year << ") "; 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)



  • 相关阅读:
    POJ 1815 求最小点割(拆点+枚举割边)
    POJ 2391 floyd + 拆点构图 + 二分 + 最大流
    POJ 1966 去掉最少的点使得图不连通(最小点割)
    sgu 194 无源汇的上下界可行流
    POJ 2396 有源汇的上下界可行流(好题)
    DIV水平垂直居中
    The Struts dispatcher cannot be found
    Introduction to 3D Game Programming with Direct X 9.0c读书笔记(1)
    Chapter 5Looking Through a Filter(如何将纹理坐标变换到屏幕坐标)
    Chapter 6Blurring Things Up之Do It Twice
  • 原文地址:https://www.cnblogs.com/guozqzzu/p/3625577.html
Copyright © 2011-2022 走看看