• 类型组合——数组、结构、指针


    本章介绍了数组、结构、指针。可以各种方式组合它们,下面介绍其中的一些。

    从结构开始:

    1. struct antarctica_years_end
    2. {
    3. int year;
    4. };

    可以创建这种类型的变量:

    antarctica_years_end s01,s02,s03;  //s01,02,s03是结构

    然后使用成员运算符访问其成员:

    s01.year = 1998;

    可以创建指向这种结构的指针:

    antarctica_years_end *pa = &s02;

    将该指针设置为有效地址后,就可使用间接成员运算符来访问成员:

    pa -> year = 1999;

    可以创建结构数组

    antarctica_years_end trio[3];

    然后,可以使用成员运算符访问元素的成员:

    trio[0].year = 2003;  //trio[0]是一个结构

    其中,trio是一个数组,trio[0]是一个结构,而trio[0].year是该结构的一个成员。由于数组名是一个指针,因此可以使用间接成员运算符:

    (trio + 1) -> year = 2004;

    可以创建指针数组

    const antarctica_years_end *arp[3] = {&s01,&s02,&s03};

    如何使用该数组来访问数据呢?既然arp是一个指针数组,arp[1]就是一个指针,可以将间接成员运算符应用于它,以访问成员:

    std::cout << arp[1] -> year << std::endl;

    可以创建指向上述数组的指针:

    const antarctica_years_end **ppa = arp;

    其中,arp是一个数组的名称,因此它是第一个元素的地址。但其第一个元素为指针,因此ppa是一个指针,指向一个指向antarctica_years_end的指针。如何使用ppa来访问数据呢?由于ppa是一个指向结构指针的指针,因此*ppa是一个结构指针,可将间接成员运算符应用于它:

    std::cout << (*ppa) -> year << std::endl;

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

    1. //4.23将上述语句放到一个简单的程序里
    2. #if 1
    3. #include
    4. using namespace std;
    5. struct antarctica_years_end
    6. {
    7. int year;
    8. };
    9. int main()
    10. {
    11. antarctica_years_end s01, s02, s03;//创建antarctica_years_end类型的变量,s01, s02, s03是结构
    12. s01.year = 1998;//使用成员运算符访问其成员
    13. antarctica_years_end *pa = &s02;//创建指向这种结构的指针
    14. pa->year = 1999;
    15. antarctica_years_end trio[3];//创建结构数组
    16. trio[0].year = 2003;//trio是一个数组,trio[0]是一个结构,而trio[0].year是该结构的一个成员。
    17. std::cout << trio->year << std::endl;//数组名是一个指针,因此可以使用间接成员运算符
    18. const antarctica_years_end *arp[3] = { &s01, &s02, &s03 };//创建指针数组
    19. std::cout << arp[1]->year << std::endl;//arp是一个数组,arp[1]就是一个指针
    20. //创建指向上述数组的指针,arp是数组名称,因此它是第一个元素的地址。
    21. //但其第一个元素为指针,因此ppa是一个指向结构指针的指针.,因此*ppa是一个结构指针
    22. const antarctica_years_end **ppa = arp;
    23. auto ppb = arp;//C++11自动类型判断
    24. std::cout << (*ppa)->year << std::endl;//由于ppa指向arp的第一个元素,因此*ppa为第一个元素,即&s01。
    25. std::cout << (*(ppb + 1))->year << std::endl;
    26. system("pause");
    27. return 0;
    28. }
    29. #endif

  • 相关阅读:
    要闻 | 自然资源部实景三维建设与城市精细化治理工程技术创新中心揭牌仪式暨第二季度工作推进会顺利召开
    rtc的计时方式
    南大通用数据库-Gbase-8a-学习-14-LOAD加载数据
    扩散模型(Diffusion Model)简介
    @vue/cli4--使用图形化界面创建项目--方法/实例
    Nginx负载均衡详解
    从乘法求导法则到BPTT算法
    第七章 ObjectScript 一般系统限制
    WPS的bug问题(解决方法->换成office吧):表格数据和透视图数据不一致问题,多次尝试确定该bug
    复杂环境下多移动机器人路径规划研究附Matlab代码
  • 原文地址:https://blog.csdn.net/qq_39072304/article/details/133911453