杂记之C语言之结构(三)
来源:互联网 发布:lumia 专用软件 编辑:程序博客网 时间:2024/06/06 03:11
结构的自引用
(1)
struct SELF_REF1 { int a; struct SELF_REF1 b; int c; };
这种类型的自引用是非法的,有点像永不终止的递归程序。
(2)
struct SELF_REF2 { int a; struct SELF_REF2 *b;//递归型结构,必须用指针来声明。 int c; };
这个声明和前面的声明的区别在于b现在是一个指针而不是结构。
编译器在结构的长度确定之前就已经知道指针的长度,所以这种类型的自引用是合法的。
事实上它所指向的是同一类型的不同结构,更加高级的数据结构,如链表和树,都是用
这种技巧实现的,每隔结构指向链表的下一个元素或树的下一个分支。
(3)【警告】
警惕这个陷阱:
typedef struct{ int a; SELF_REF3 *b; int c;}SELF_REF3;
这个声明的目的是为这个结构创建类型名SELF_REF3,但是它失败了,类型名直到的末尾
才定义,所以在结构声明的内部它尚未定义。
解决方案是定义一个结构标签来声明b,如下
typedef struct SELF_REF3_TAG{ int a; struct SELF_REF3_TAG *b;//必须同时出现在同一行 int c;}SELF_REF3;
- 杂记之C语言之结构(三)
- 杂记之C语言之结构(一)
- 杂记之C语言之结构(二)
- 杂记之C语言之结构(四)
- 杂记之C语言之结构(五)
- 杂记之C语言之指针(三)
- 杂记之C语言之结构和联合
- 杂记之C语言函数getchar()
- 杂记之C语言之指针(一)
- 杂记之C语言之指针(二)
- 杂记之C语言之无限循环
- 杂记之C语言之关键字const
- 杂记之C语言之库函数assert
- 杂记之C语言的转义字符
- 杂记之C语言函数strncmp
- 学习杂记(三)c语言
- 杂记之C语言之ASCII码中的转换
- 杂记之C语言之条件真假判断
- MySQL用户账号管理(添加、删除、限制、设置密码、远程访问)
- 开源中国iOS客户端学习——(二)下拉刷新特效EGOTableViewPullRefresh
- wamp5 织梦环境搭建
- 由 bind_mismatch 引起的 大量 version_count 问题
- JSP总结(一)
- 杂记之C语言之结构(三)
- 解决getOutputStream() has already been called for this response
- TI DSP hex2000.exe使用
- 用SQL语句添加删除修改字段
- dev_dbg
- Python 字符串操作
- matlab中的sort函数 .
- 学习REST
- screen命令让断开SSH/TELNET的你依然可以保持程序继续运行工作