首页 技术 正文
技术 2022年11月21日
0 收藏 563 点赞 4,992 浏览 1873 个字
  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. }
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,103
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,579
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,427
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,199
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,834
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,917