(60) 结构体指针结构体变量嵌套结构体指针嵌套函数指针数组指针指针数组typedef 综合运用

Posted 工业物联网集成了微电子计算技术、通信技术、云平台、大数据技术

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了(60) 结构体指针结构体变量嵌套结构体指针嵌套函数指针数组指针指针数组typedef 综合运用相关的知识,希望对你有一定的参考价值。

  1. #include<stdio.h>
  2. #include<iostream>
  3. #include<malloc.h>
  4. /*
  5. author : 吴永聪
  6. program: 结构体指针、结构体变量嵌套、结构体指针嵌套、函数指针、数组指针、指针数组、typedef 综合运用
  7. date : 2017.6.3
  8. sum up : 结构体嵌套指针(函数指针、结构体指针、数组指针等)的时候需要为这个嵌套的指针指向一个合适的地址,该地址应为嵌套的指针地址
  9. 关键的一句话 注意区分两个p3的不同点 第一个p3只是一个结构体里的成员【变量名】 第二个p3代表的是一个结构体【地址值】
  10. */
  11. typedef unsigned int os;
  12. typedef struct Manager //第三层结构体
  13. {
  14. os age;
  15. os sex;
  16. void (*Manage)();
  17. }Manager,*pManage;
  18. typedef struct Teacher //第二层结构体
  19. {
  20. os age;
  21. os sex;
  22. void (*Teach)();
  23. Manager manager;
  24. pManage p3; //嵌套结构体指针 在使用p3之前要先 对其初始化
  25. }Teacher,*pTeacher;
  26. typedef struct Student{ //第一层结构体
  27. os age;
  28. os sex;
  29. char *name;
  30. os (*array)[5];//数组指针
  31. os *array1[10];//指针数组
  32. void (*Learn)(); //函数指针
  33. Teacher teacher; //嵌套结构体普通类型
  34. pTeacher p2; //嵌套结构体指针 在使用p2之前要先 对其初始化
  35. }Student,*pStu;

 

  1. void Manage()
  2. {
  3. printf("I am a manager\n");
  4. }
  5. void Teach()
  6. {
  7. printf("I am a teacher\n");
  8. }
  9. void Learn()
  10. {
  11. printf("I am a student\n");
  12. }
  13. os array[5]={0};
  14. int main(_In_ int _Argc, _In_reads_(_Argc) _Pre_z_ char ** _Argv, _In_z_ char ** _Env)
  15. {
  16. Student student;
  17. //(1)typedef定义普通类型名
  18. pStu p1=(pStu)malloc(sizeof(Student));
  19. pTeacher p2=(pTeacher)malloc(sizeof(Teacher));
  20. pManage p3=(pManage)malloc(sizeof(Manager));
  21. char *name1="wyc";
  22. char a[]={‘w‘,‘y‘,‘c‘};
  23. os c=3;
  24. Teacher t;
  25. t.Teach=Teach;
  26. t.Teach();
  27. //(2)typedef定义结构体指针,在使用之前需要先初始化结构体指针
  28. p1->age=3;
  29. p1->sex=4;
  30. p1->Learn=Learn; //函数指针
  31. p1->Learn();//函数指针
  32. p1->name=name1;
  33. p1->name=a;
  34. //(3)结构体里面嵌套普通结构体变量 二重嵌套
  35. p1->teacher.Teach=Teach;
  36. p1->teacher.Teach();
  37. (*p1).Learn(); //用*p的形式代表对一大片内存操作 等同于 Student stu
  38. //(4)结构体指针嵌套结构体指针 二重嵌套
  39. p1->p2=p2;//关键的一句话
  40. //p1->p2->Teach=Teach;
  41. //p1->p2->Teach();
  42. (*p1).p2->Teach=Teach;
  43. (*((*p1).p2)).Teach();
  44. //(5)结构体指针嵌套结构体指针嵌套结构体普通变量 三重嵌套
  45. ((p1->teacher).manager).Manage=Manage;
  46. p1->teacher.manager.Manage();
  47. //(6)结构体指针嵌套结构体指针嵌套结构体指针 三重嵌套
  48. p1->p2->p3=p3;//关键的一句话 注意区分两个p3的不同点 第一个p3只是一个结构体里的成员【变量名】 第二个p3代表的是一个结构体【地址值】
  49. p1->p2->p3->Manage=Manage;
  50. p1->p2->p3->Manage();
  51. //(7)结构体访问数组指针
  52. p1->array=&array;
  53. //(8)结构体访问指针数组
  54. p1->array1[0]=&c;
  55. p1->array1[1]=&c;
  56. p1->array1[2]=&c;
  57. p1->array1[3]=&c;
  58. free(p1);
  59. free(p2);
  60. free(p3);
  61. system("pause");
  62. return 0;
  63. }

以上是关于(60) 结构体指针结构体变量嵌套结构体指针嵌套函数指针数组指针指针数组typedef 综合运用的主要内容,如果未能解决你的问题,请参考以下文章

C语言提高:结构体嵌套一级指针

C语言提高:结构体嵌套一级指针

C 语言结构体 ( 结构体中嵌套二级指针 | 为 结构体内的二级指针成员 分配内存 | 释放 结构体内的二级指针成员 内存 )

结构体变量实验报告

结构体(结构体嵌套结构体指针结构体参数传递)

C语言-结构体