![C++新经典](https://wfqqreader-1252317822.image.myqcloud.com/cover/184/44510184/b_44510184.jpg)
上QQ阅读APP看书,第一时间看更新
10.2.2 结构体指针
所谓结构体指针,就是结构体变量的指针,用于指向该结构体变量所占据的内存的起始地址。当然,结构体变量的指针也可以指向结构体数组中的元素,因为结构体数组中的每个元素就相当于一个结构体变量。看如下代码:
![](https://epubservercos.yuewen.com/F329F6/23721607801994206/epubprivate/OEBPS/Images/Figure-p200_86099.jpg?sign=1738937109-7Dli22RIAURDFkSE42oyiro6tthDLgIm-0-370449b14eb4556feb4124ff09a02365)
上面这段代码中,ps指向了stu,stu里面的内容如果发生了改变,就等于ps所指向的内容发生了改变,那么如何通过结构体变量指针来访问结构体变量的成员呢?有两种方法,一种还是用结构体成员运算符“.”,另一种是用指向结构体成员运算符“->”。看如下代码:
![](https://epubservercos.yuewen.com/F329F6/23721607801994206/epubprivate/OEBPS/Images/Figure-p200_86100.jpg?sign=1738937109-6f6rBLUbU4muUYwFRmtmfsWGjuQsWxlP-0-35a8db4864fa68b2027c574d3cae077e)
再继续看代码,好好理解一下:
![](https://epubservercos.yuewen.com/F329F6/23721607801994206/epubprivate/OEBPS/Images/Figure-p201_86102.jpg?sign=1738937109-ccOq2K41F5L7pclUc1mPo7S1Bkhbisvo-0-deac10b60b2c0b789398e0c3aeaf3330)
上面代码中,注意ps++意味着ps指向下一个数组元素的开始地址。有几点说明:
(1)现在ps指向stuArr,也就是数组的第一个元素。看如下代码:
![](https://epubservercos.yuewen.com/F329F6/23721607801994206/epubprivate/OEBPS/Images/Figure-p201_86104.jpg?sign=1738937109-WJr7WjcBdt5EtRm6uO6l4gfjELuPQTJJ-0-ef586a84f055bc5717c1143a9abf9291)
那如下代码,又是什么结果呢?
![](https://epubservercos.yuewen.com/F329F6/23721607801994206/epubprivate/OEBPS/Images/Figure-p201_86105.jpg?sign=1738937109-CDRCyd8tentRD9prUbgJcLueBMYXgxT0-0-f59e170d4f788ed659731f34df4553f7)
(2)指针ps定义为指向struct student类型变量的指针,它只能指向一个结构体类型的变量或者指向一个结构体类型数组中的某个元素,不能指向其中的具体某个成员。例如,下面这些写法是不可以的:
![](https://epubservercos.yuewen.com/F329F6/23721607801994206/epubprivate/OEBPS/Images/Figure-p201_86107.jpg?sign=1738937109-OMuv8cSnDStAsTnOura3ah7Lr527SppS-0-4d704b2fb53c16415905dbde9f4a07d4)