C++ 指针与结构体

在本文中,我们将通过示例了解如何使用指针来访问结构体中的数据。

在 C++ 中,您不仅可以基本类型( intfloatdouble 等)创建指针变量,您也可以为用户定义的类型创建指针变量,如在结构体中。

如果您不知道什么是指针,请访问C++ 指针

以下是为结构体创建指针的方法:

#include <iostream>
using namespace std;

struct temp {
    int i;
    float f;
};

int main() {
    temp *ptr;
    return 0;
}

这个程序创建了一个 temp结构体类型的指针 ptr.

示例:指向结构体的指针

#include <iostream>
using namespace std;

struct Distance {
    int feet;
    float inch;
};

int main() {
    Distance *ptr, d;

    ptr = &d;

    cout << "Enter feet: ";
    cin >> (*ptr).feet;
    cout << "Enter inch: ";
    cin >> (*ptr).inch;

    cout << "Displaying information." << endl;
    cout << "Distance = " << (*ptr).feet << " feet " << (*ptr).inch << " inches";

    return 0;
}

输出

Enter feet: 4
Enter inch: 3.5
Displaying information.
Distance = 4 feet 3.5 inches

在这个程序中,定义了一个结构体类型的指针变量 ptr 和一个结构体类型的正常变量 d

变量 d 的地址存储到指针变量,即 ptr 指向变量 d. 那么,使用指针访问变量 d 的成员函数。

笔记:

  • 在这个程序中,因为指针 ptr 指向变量 d , 因此 (*ptr).inchd.inch 是等价的。同样, (*ptr).feetd.feet 是等价的。
  • 但是,如果我们使用指针,则使用 -> 运算符访问类成员要好得多。这是因为 . 运算符的优先级高于 * 运算符。因此,我们在使用 (*ptr).inch 时用括号括起来 *ptr 。因此,如果在一个代码中同时使用两个运算符,则更容易出错。
ptr->feet 等同于 (*ptr).feet
ptr->inch 等同于 (*ptr).inc