(60) 結構體指針、結構體變量嵌套、結構體指針嵌套、函數指針、數組指針、指針數組、typedef 綜合運用
阿新 • • 發佈:2017-10-07
free ear sum n) col () argv printf 指針
- #include<stdio.h>
- #include<iostream>
- #include<malloc.h>
- /*
- author : 吳永聰
- program: 結構體指針、結構體變量嵌套、結構體指針嵌套、函數指針、數組指針、指針數組、typedef 綜合運用
- date : 2017.6.3
- sum up : 結構體嵌套指針(函數指針、結構體指針、數組指針等)的時候需要為這個嵌套的指針指向一個合適的地址,該地址應為嵌套的指針地址
- 關鍵的一句話 註意區分兩個p3的不同點 第一個p3只是一個結構體裏的成員【變量名】 第二個p3代表的是一個結構體【地址值】
- */
- typedef unsigned int os;
- typedef struct Manager //第三層結構體
- {
- os age;
- os sex;
- void (*Manage)();
- }Manager,*pManage;
- typedef struct Teacher //第二層結構體
- {
- os age;
- os sex;
- void (*Teach)();
- Manager manager;
- pManage p3; //嵌套結構體指針 在使用p3之前要先 對其初始化
- }Teacher,*pTeacher;
- typedef struct Student{ //第一層結構體
- os age;
- os sex;
- char *name;
- os (*array)[5];//數組指針
- os *array1[10];//指針數組
- void (*Learn)(); //函數指針
- Teacher teacher; //嵌套結構體普通類型
- pTeacher p2; //嵌套結構體指針 在使用p2之前要先 對其初始化
- }Student,*pStu;
- void Manage()
- {
- printf("I am a manager\n");
- }
- void Teach()
- {
- printf("I am a teacher\n");
- }
- void Learn()
- {
- printf("I am a student\n");
- }
- os array[5]={0};
- int main(_In_ int _Argc, _In_reads_(_Argc) _Pre_z_ char ** _Argv, _In_z_ char ** _Env)
- {
- Student student;
- //(1)typedef定義普通類型名
- pStu p1=(pStu)malloc(sizeof(Student));
- pTeacher p2=(pTeacher)malloc(sizeof(Teacher));
- pManage p3=(pManage)malloc(sizeof(Manager));
- char *name1="wyc";
- char a[]={‘w‘,‘y‘,‘c‘};
- os c=3;
- Teacher t;
- t.Teach=Teach;
- t.Teach();
- //(2)typedef定義結構體指針,在使用之前需要先初始化結構體指針
- p1->age=3;
- p1->sex=4;
- p1->Learn=Learn; //函數指針
- p1->Learn();//函數指針
- p1->name=name1;
- p1->name=a;
- //(3)結構體裏面嵌套普通結構體變量 二重嵌套
- p1->teacher.Teach=Teach;
- p1->teacher.Teach();
- (*p1).Learn(); //用*p的形式代表對一大片內存操作 等同於 Student stu
- //(4)結構體指針嵌套結構體指針 二重嵌套
- p1->p2=p2;//關鍵的一句話
- //p1->p2->Teach=Teach;
- //p1->p2->Teach();
- (*p1).p2->Teach=Teach;
- (*((*p1).p2)).Teach();
- //(5)結構體指針嵌套結構體指針嵌套結構體普通變量 三重嵌套
- ((p1->teacher).manager).Manage=Manage;
- p1->teacher.manager.Manage();
- //(6)結構體指針嵌套結構體指針嵌套結構體指針 三重嵌套
- p1->p2->p3=p3;//關鍵的一句話 註意區分兩個p3的不同點 第一個p3只是一個結構體裏的成員【變量名】 第二個p3代表的是一個結構體【地址值】
- p1->p2->p3->Manage=Manage;
- p1->p2->p3->Manage();
- //(7)結構體訪問數組指針
- p1->array=&array;
- //(8)結構體訪問指針數組
- p1->array1[0]=&c;
- p1->array1[1]=&c;
- p1->array1[2]=&c;
- p1->array1[3]=&c;
- free(p1);
- free(p2);
- free(p3);
- system("pause");
- return 0;
- }
(60) 結構體指針、結構體變量嵌套、結構體指針嵌套、函數指針、數組指針、指針數組、typedef 綜合運用