经验证,仿真结果与预期一致。
#include <QDebug>
struct test_years {int year;};//定义结构体
int main() {
//定义三个结构体,s01,s02,s03
test_years s01,s02,s03;
s01.year = 1000;//给s01结构体中year赋值
s02.year = 2000;//给s02结构体中year赋值
test_years * s = &s03;//给s03结构体中year赋值
s->year = 3000;
const test_years * arp[3] = {&s01,&s02,&s03};//定义arp指针数组,存储三个结构体的地址。
qDebug() << "arp" << arp; //第一个结构体地址的地址
qDebug() << "&arp" << &arp; //第一个结构体地址的地址
qDebug() << "&arp[0]" << &arp[0]; //第一个结构体地址的地址
qDebug() << "&arp[1]" << &arp[1]; //第二个结构体地址的地址
qDebug() << "&arp[2]" << &arp[2]; //第三个结构体地址的地址
qDebug() << "*arp" << *arp; //第一个结构体地址的值
qDebug() << "*(&arp[0])"<< *(&arp[0]); //第一个结构体地址的值
qDebug() << "arp[0]" << arp[0]; //第一个结构体地址的值
qDebug() << "*(&arp[1])"<< *(&arp[1]); //第二个结构体地址的值
qDebug() << "arp[1]" << arp[1]; //第二个结构体地址的值
qDebug() << "*(&arp[2])"<< *(&arp[2]); //第三个结构体地址的值
qDebug() << "arp[2]" << arp[2]; //第三个结构体地址的值
//将第一个结构体地址的地址赋给ppa,即&s01的地址;
//*ppa为第一个结构体的地址,等于arp[0]或&s01,代表s01的地址,
//**ppa代表第一个结构体
const test_years ** ppa = arp;
qDebug() << "ppa" << ppa; //第一个结构体地址的地址
qDebug() << "*ppa" << *ppa; //第一个结构体地址的值,这个值也是地址,指向第一个结构体s01
qDebug() << "(**ppa).year" << (**ppa).year; //输出第一个结构体中year的值
qDebug() << "(*ppa)->year" << (*ppa)->year; //输出第一个结构体中year的值 。 “->”代表指向结构的指针
qDebug() << "(*(ppa + 1))->year" << (*(ppa + 1))->year; //输出第二个结构体中year的值
qDebug() << "(*(ppa + 2))->year" << (*(ppa + 2))->year;//输出第三个结构体中year的值
}
上述代码运行结果: