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 综合运用的更多相关文章

  1. 《征服 C 指针》摘录3:数组 与 指针

    一.数组 和 指针 的微妙关系 数组 是指将固定个数.相同类型的变量排列起来的对象. 正如之前说明的那样,给指针加 N,指针前进“当前指针指向的变量类型的长度 X N”. 因此,给指向数组的某个元素的 ...

  2. Go语言基础四:数组和指针

    GO语言中数组和指针 数组 Go语言提供了数组类型的数据结构. 数组是同一数据类型元素的集合.这里的数据类型可以是整型.字符串等任意原始的数据类型.数组中不允许混合不同类型的元素.(当然,如果是int ...

  3. go变量、类的概念以及类的使用方式,嵌套结构体

    go变量.类的概念以及类的使用方式,嵌套结构体 Go变量 go使用var声明变量,当声明变量时,这个变量对应的值总是会被初始化.这个值要么用指定的值初始化,要么用零值(即变 量类型的默认值)做初始化. ...

  4. C语言 结构体(嵌套结构体--结构体数组)

    //结构体--嵌套结构体和结构体数组 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> ...

  5. 黑马程序员——C语言基础 变量类型 结构体

    Java培训.Android培训.iOS培训..Net培训.期待与您交流! (以下内容是对黑马苹果入学视频的个人知识点总结) (一)变量类型 1)局部变量 1> 定义:在函数内部定义的变量,称为 ...

  6. c语言的作用域、变量与结构体

    一.变量的作用域 根据变量的作用域,可以分为: 1.局部变量: 1> 定义:在函数(代码块)内部定义的变量(包括函数的形参) 2> 作用域:局部变量只有在定义它的函数内部使用,其它函数不能 ...

  7. 深入理解指针—>结构体里的成员数组和指针

    单看这文章的标题,你可能会觉得好像没什么意思.你先别下这个结论,相信这篇文章会对你理解C语言有帮助.这篇文章产生的背景是在微博上,看到@Laruence同学出了一个关于C语言的题,微博链接.微博截图如 ...

  8. list_entry(ptr, type, member)——知道结构体内某一成员变量地址,求结构体地址

    #define list_entry(ptr, type, member) \ ((type *)(() -> member))) 解释: 1 在0这个地址看做有一个虚拟的type类型的变量,那 ...

  9. 读陈浩的《C语言结构体里的成员数组和指针》总结,零长度数组

    原文链接:C语言结构体里的成员数组和指针 复制例如以下: 单看这文章的标题,你可能会认为好像没什么意思.你先别下这个结论,相信这篇文章会对你理解C语言有帮助.这篇文章产生的背景是在微博上,看到@Lar ...

随机推荐

  1. iOS模拟器发生了崩溃,去哪找Crash Log

    iOS模拟器发生了崩溃,可以在如下地方找到崩溃日志: ~/Library/Logs/DiagnosticReports/

  2. for (;;) 与 while (true),哪个更快?

    Java技术栈 www.javastack.cn 优秀的Java技术公众号 在 JDK8u 的 jdk 项目下做个很粗略的搜索: mymbp:/Users/me/workspace/jdk8u/jdk ...

  3. CF 1178E Archaeology 题解

    题面 这道题竟然是E?还是洛谷中的黑题? wow~!! 于是就做了一下: 然后一下就A了:(这并不代表想的容易,而是写的容易) 这道题就是骗人的!! 什么manacher,什么回文自动机,去靠一边站着 ...

  4. 洛谷 P3368 树状数组 题解

    题面 本题随便看两眼就知道该题满足了优美的查分性质: 对于在区间[x,y]内操作时,应该将查分数组的第x项和第y+1项进行相反操作: 询问答案时,问第i个数的值就是查分数组的前i项和: 暴力+玄学卡常 ...

  5. MyBatis删除多个类型不一致或不在同一个对象中参数的记录

    控制层中: // 根据店家id查找图书,已售数量要大于等于1才显示 List<SoldBook> sbList = shopService.getSoldBookByShopidAndBo ...

  6. paramiko : 错误集整理

    错误1    时间2017-12-19:No handlers could be found for logger "paramiko.transport" 解决办法:parami ...

  7. doT学习(三)之实战

    案例一: <html> <head> <script id="headertmpl" type="text/x-dot-template&q ...

  8. springboot中model,modelandview,modelmap的区别与联系

    springboot 中Model,ModelAndView,ModelMap的区别与联系 Model是一个接口,它的实现类为ExtendedModelMap,继承ModelMap类 public c ...

  9. flutter-常见的基础组件(一)

    flutter 1.Text 文本组件 Text( 'czklove', //文本上的文字 style: TextStyle( // style 代表对文字的描述 fontSize: 18, //文字 ...

  10. java 返回输入中出现次数最多的字符串

    举例输入: abc abc de de de fghi fghi 应该返回: de 代码: static List<String> func(String str) { String[] ...