(60) 结构体指针、结构体变量嵌套、结构体指针嵌套、函数指针、数组指针、指针数组、typedef 综合运用
- #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 综合运用的更多相关文章
- 《征服 C 指针》摘录3:数组 与 指针
一.数组 和 指针 的微妙关系 数组 是指将固定个数.相同类型的变量排列起来的对象. 正如之前说明的那样,给指针加 N,指针前进“当前指针指向的变量类型的长度 X N”. 因此,给指向数组的某个元素的 ...
- Go语言基础四:数组和指针
GO语言中数组和指针 数组 Go语言提供了数组类型的数据结构. 数组是同一数据类型元素的集合.这里的数据类型可以是整型.字符串等任意原始的数据类型.数组中不允许混合不同类型的元素.(当然,如果是int ...
- go变量、类的概念以及类的使用方式,嵌套结构体
go变量.类的概念以及类的使用方式,嵌套结构体 Go变量 go使用var声明变量,当声明变量时,这个变量对应的值总是会被初始化.这个值要么用指定的值初始化,要么用零值(即变 量类型的默认值)做初始化. ...
- C语言 结构体(嵌套结构体--结构体数组)
//结构体--嵌套结构体和结构体数组 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> ...
- 黑马程序员——C语言基础 变量类型 结构体
Java培训.Android培训.iOS培训..Net培训.期待与您交流! (以下内容是对黑马苹果入学视频的个人知识点总结) (一)变量类型 1)局部变量 1> 定义:在函数内部定义的变量,称为 ...
- c语言的作用域、变量与结构体
一.变量的作用域 根据变量的作用域,可以分为: 1.局部变量: 1> 定义:在函数(代码块)内部定义的变量(包括函数的形参) 2> 作用域:局部变量只有在定义它的函数内部使用,其它函数不能 ...
- 深入理解指针—>结构体里的成员数组和指针
单看这文章的标题,你可能会觉得好像没什么意思.你先别下这个结论,相信这篇文章会对你理解C语言有帮助.这篇文章产生的背景是在微博上,看到@Laruence同学出了一个关于C语言的题,微博链接.微博截图如 ...
- list_entry(ptr, type, member)——知道结构体内某一成员变量地址,求结构体地址
#define list_entry(ptr, type, member) \ ((type *)(() -> member))) 解释: 1 在0这个地址看做有一个虚拟的type类型的变量,那 ...
- 读陈浩的《C语言结构体里的成员数组和指针》总结,零长度数组
原文链接:C语言结构体里的成员数组和指针 复制例如以下: 单看这文章的标题,你可能会认为好像没什么意思.你先别下这个结论,相信这篇文章会对你理解C语言有帮助.这篇文章产生的背景是在微博上,看到@Lar ...
随机推荐
- olap和Oltp(转)
OLAP和OLTP的区别(基础知识) 联机分析处理 (OLAP) 的概念最早是由关系数据库之父E.F.Codd于1993年提出的,他同时提出了关于OLAP的12条准则.OLAP的提出引起了很大的反响, ...
- 小记---------Hadoop读、写文件步骤,HDFS架构理解
Hadoop 是一个开源框架,可编写和运行分布式应用处理大规模数据 Hadoop框架的核心是HDFS 和 MapReduce HDFS是分布式文件系统(存储) MapReduce是分布式数据处理模型和 ...
- mysql中char,varchar与text类型的区别
关于char,varchar与text平时没有太在意,一般来说,可能现在大家都是用varchar.但是当要存储的内容比较大时,究竟是选择varchar还是text呢?不知道...... text ...
- Java static基本认知
一. static的用途 在Java编程思想中有这么一句话:“static方法就是没有this的方法.在static方法内部不能调用非静态方法,反过来是可以的.而且可以在没有创建任何对象的前提下,仅仅 ...
- form表单提交被拦截
最近做的一个项目,利用form表单(可以避免跨域问题)提交,在chrome可以正常进行跳转,但是在手机端,以及一些pc端浏览器却无法正常跳转.通过检查后台日志,没有正常跳转的都是因为后天直接没有收到该 ...
- [转载]C / C++ 计算程序运行的时间
原文链接:https://blog.csdn.net/qq_36667170/article/details/79507547 在学数据结构过程中老师让查看不同算法的运行时间,然后让自己打印运行时间. ...
- 实现 RSA 算法之 C 语言实现(第二章)(老物)
第二章 如何实现应用RSA算法 趁着白天在自家店里的闲暇时间来写写第二章了,假设记住了第一章的各种定理之后,我们又该如何实现RSA密码的加密解密呢?也懒得废话了,直接进入正题吧. 先回顾几个知识点: ...
- Oracle常用函数(3)
1)to_char()函数,将日期转换为字符串表示 SQL> select to_char(sysdate,'yyyy"年"mm"月"dd"日& ...
- 什么是RESTful API、WSGI、pecan
RESTful API REST的全称是Representational State Transfer(表征状态转移), 是Roy Fielding在他的博士论文Architectural Style ...
- 阿里服务器+Centos7.4+Tomcat+JDK部署
适用对象 本文档介绍如何使用一台基本配置的云服务器 ECS 实例部署 Java web 项目.适用于刚开始使用阿里云进行建站的个人用户. 配置要求 这里列出的软件版本仅代表写作本文档使用的版本.操作时 ...