1. 程式人生 > >(60) 結構體指針、結構體變量嵌套、結構體指針嵌套、函數指針、數組指針、指針數組、typedef 綜合運用

(60) 結構體指針、結構體變量嵌套、結構體指針嵌套、函數指針、數組指針、指針數組、typedef 綜合運用

free ear sum n) col () argv printf 指針

  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 綜合運用