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

來源:互聯網
上載者:User

標籤:變數   ret   bsp   typedef   ios   author   sys   unsigned   manager   

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.