您的位置:首页 > 其它

关于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 具体实现方式还得看处理理是大端还是小端。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: