使用指针指向结构体,通过指针访问结构体的方式。

#include <iostream>

#include <cstring>

using namespace std;

int main(){
struct things {
int good;
int bad;
};
things grubnose = {3,453};
things *pt = &grubnose;
cout << grubnose.good << endl;
cout << pt -> bad << endl;
cout << (*pt).good << endl;
}

结构体grubnose访问成员使用点运算符,指针访问结构体成员使用->,pt是指向结构的指针,则*pt就是被指向的值—结构本身。由于*pt是一个结构,因此(*pt).good是该结构的成员。

结构体数组访问

int main(){

struct things {
int good;
int bad;
};
things th[3];
th[0].good = 1;
(th+1) -> good = 2;
cout << th[0].good << endl;
cout << th[1].good << endl;
}

数组直接使用下标[0]就可以访问第一个结构体元素,th是数组名,也就是指向第一个元素的指针,加1后相当于指针指向了第二个元素,然后再使用->访问结构体中的成员。

指针数组指向结构体

int main(){
struct things {
int good;
int bad;
} s1,s2,s3;
things *th[3] = {&s1,&s2,&s3};
th[0] -> good = 1; //th[0]就是一个指针
cout << th[0] -> good << endl;
things **ppa = th;
cout << (*ppa) -> good << endl;
}

由于ppa指向th的第一个元素,因此*ppa为第一个元素,即&s1。所以,(*ppa)->good为s1的good成员。