结构体知识梳理3-结构体包含结构体
2014-06-19 10:50
211 查看
基本使用
结构体的成员可以是任何已知类型,那么当然也可以是结构体类型:typedef struct student{ int num; //成员 int age; char name[10]; }s_stu,*p_stu; typedef struct team{ int num; s_stu stu1; p_stu pstu1; //注意这里是指针变量,占4个字节,存储地址而已 s_stu array[3]; }s_team,*p_team;s_team内存图如下
多层结构体的成员的访问只需要一层一层找下来就可以了,普通变量用' .',指针变量或地址用->。
s_team team1; p_team p_team1 = &team1; team1.pstu1 = &team.stu1; team1.stu1.age = 1; team1.pstu1->age = 1; //这里team1.pstu1->age能够操作的前提是 team1.pstu1已经存储team1.stu1的地址 team1.array[i].age = 1; p_team1->pstu1 = p_team1.stu1; p_team1->stu1.age = 1; p_team1->pstu1->age = 1; p_team1->array[i].age = 1;
成员前面用.还是用-> 只需要看上一层是否是指针。
注意事项
结构体的成员类型不能与自身相同typedef struct student{ int num; int age; struct student stu1; }s_stu,*p_stu;
我们可以反证如下:
如果以上代码存在,则要定义一个变量 s_stu stu,会为每一个成员分配内存,当分配到成员变量stu1的时候,又是一个s_stu 变量,这样的话就陷入死循环,导致代码崩溃。
结构体成员可以是自身类型的指针
typedef struct student{ int num; int age; struct student *p;//注意这里占4字节,存储地址,不要被*前面的struct student 所混淆 }s_stu,*p_stu;
s_stu stu1; //假设地址0x30 s_stu stu2; //假设地址0x20 stu1.num = 1; stu1.age = 1; stu1.p = &stu2;以上代码所画内存图如下
相关文章推荐
- 黑马程序员—C语言结构体知识梳理
- 类模板语法知识体系梳理(包含大量常犯错误demo,尤其滥用友元函数的错误)
- 类模板语法知识体系梳理(包含大量常犯错误demo,尤其滥用友元函数的错误)
- Spring Annotation知识梳理
- 好久没写博客了,最近准备从新认识一下自己,审视一下自己,从新梳理一下android知识!
- Linux 字符设备驱动结构(三)—— file、inode结构体及chardevs数组等相关知识解析
- R语言基本知识梳理(1)-基本管理及向量操作
- shell基础知识梳理二
- css2基础知识梳理
- [SQL] SQL 基础知识梳理(四) - 数据更新
- js基础知识梳理(最简版)
- C++知识梳理
- Ajax 知识体系大梳理
- spring远程服务知识梳理
- 前端知识体系梳理
- [SQL] SQL 基础知识梳理(六)- 函数、谓词、CASE 表达式
- [SQL] SQL 基础知识梳理(七)- 集合运算
- Android项目架构--知识体系简单梳理(一)
- Python基础知识梳理 - 第01部分
- 工作两周年—--个人知识体系梳理