关于struct的一些用法
2010-12-10 15:44
225 查看
结构的自引用
2 如下形式是非法的:3 struct SELF_REF1{
4 int a;
5 struct SELF_REF1 b;
6 int c;
7 };
8 由于b是一个完整的结构,但其内部还将包含它自己的成员b, 以上形式会导致无穷递归,因此是非法的。
9
10 如下形式是合法的:
11
12 struct SELF_REF2{
13 int a;
14 struct SELF_REF1 *b;
15 int c;
16 };
17
18 这两个声明的区别在于:
19 现在的b是一个指针而不是一个结构。指针的长度在结构的长度确定之前就可以确定。
20
21 下面的声明会出错:
22 typedef struct{
23 int a;
24 A b;
25 int c;
26 }A;
27
28 解决的办法:
29 typedef struct _A{
30 int a;
31 _A b;
32 int c;
33 }A;
34
不完整的声明:
36 偶尔,你必须声明一些相互之间存在依赖的结构。也就是说,两个结构之间相互包含,所谓“你中有我,我中有你”,但哪个结构应该先声明呢?37 这个问题的解决方案就是不完整声明:
38
39 struct B;
40
41 struct A{
42 struct B;
43 int a;
44 };
45
46 struct B{
47 struct A;
48 int b;
49 };
50
位段(bit field)
52 使用结构体有实现位段的能力,但注重可移植性和程序应该避免使用位段。53
54 如下是一个位段的例子:
55
56 struct CHAR{
57 unsigned ch :7;
58 unsigned font :6;
59 unsigned size :19;
60 };
61
62 struct CHAR ch1;
63 ch1.ch = 0x1;
64 ch1.font = 0x1;
65 ch1.font = 0x1;
66 /*ch1: 0000_0000_0000_0000_0010_0000_1000_0001*/
67 具体实现方式还得看处理理是大端还是小端。
相关文章推荐
- Java基础篇(关于this的一些用法)
- 关于Datetime的一些用法总结(转)
- 关于数据库SQL管理的一些简单用法
- 关于system()的一些用法
- 关于ggplot2的一些用法
- 关于const用法的一些小结
- 关于selector的一些用法
- 关于controller的一些用法
- 关于索引一些用法介绍(db2)
- 关于asp.net mvc JavaScriptResult的一些用法记录
- 关于非对称加密算法中的公钥加密的用法的一些个人看法
- 关于命令行的一些用法
- 关于C语言中return用法的一些总结
- 关于xib的一些简单用法
- iphone关于self.用法的一些总结
- 关于android:descendantFocusability一些用法感触
- 关于SpannableString的一些用法
- 关于StoryBoard的一些用法研究
- 关于SqlDataReader一些用法
- 关于shell的一些用法