• (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 ");
    4. }
    5. void Teach()
    6. {
    7. printf("I am a teacher ");
    8. }
    9. void Learn()
    10. {
    11. printf("I am a student ");
    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. }
  • 相关阅读:
    sql server 纵横表的转换
    url参数的编码解码Demo
    SqlServer 列的增加和删除
    asp.net下ajax.ajaxMethod使用方法(转)
    js中document.all 的用法
    cookie跨域,跨目录访问及单点登录。
    错误记录:html隐藏域的值存字符串时出错
    .NET下用C#实现邮箱激活功能
    js与C#服务端 json数据交互
    sqlserver数据可空插入报错
  • 原文地址:https://www.cnblogs.com/wycBlog/p/7634174.html
Copyright © 2020-2023  润新知