图书行业

首页 » 常识 » 常识 » 自学C语言书笔记1302结构的复
TUhjnbcbe - 2021/12/28 19:39:00

一、嵌套结构

嵌套结构是指在一个结构成员中可以包括其他一个结构。

1.一般形式

struct结构名{类型变量名;类型变量名;struct结构名结构变量名;……}结构变量名;

例如:

structstring{charname[8];intage;structaddraddress;}student;

其中,addr为另一个结构的结构名,必须要先进行声明才行。

structaddr{charcity[20];unsignedlongzipcode;chartel[14];}

2.使用说明

1)给student结构中的成员address结构中的zipcode赋值语句如下:

student.address.zipcode=;

也就是一层一层的往下走。

2)每个结构成员名从最外层直接到最内层逐个被列出,即嵌套式结构成员的表达方式:

结构变量名.嵌套结构变量名.结构成员名;

类似class类。

嵌套结构可以有很多,结构成员名为最内层结构中不是结构的成员名。

二、位结构

位结构是一种特殊的结构,在需要按位访问一个字节或字的多个位时,位结构比按位运算符更加方便。

1.一般形式

struct位结构名{数据类型变量名:整型常数;数据类型变量名:整型常数;}位结构变量;

2.使用说明

1)数据类型必须是int(unsigned或signed)。

整型常数必须是非负数的整数,范围是0~15,表示二进制位的个数,即表示多少位。

2)变量名是选择项,可以不命名,这样规定是为了排列需要。

例如:

struct{unsignedincon:8;unsignedtxcolor:4;unsignedbgcplor:3;unsignedblink:1;}ch;

incon占用低字节的0~7,共8位。

txcolor占用高字节的0~3位,共4位。

bgcolor占用高字节的4~6位,共3位。

blink占用高字节的第7位。

(至于为什么会这么安排,我也不是很明白。不过把上面的字节相加的总和,倒是一个16位。)

3)位结构成员的访问与结构成员的访问相同。

访问上例位结构中的bgcolor成员的表示形式如下:

ch.bgcolor;

3.注意事项

1)位结构中的成员可以定义为unsigned,也可以定义为signed,但当成员长度为1时,会被认为是unsigned类型。

因为单个位不可能具有符号。

2)位结构中的成员不能使用数组和指针,但位结构变量可以是数组和指针。

如果是指针,其成员访问方式跟结构指针相同。

3)位结构总长度(位数),是各个位成员定义的位数之和,可以超过两个字节。8位为一个字节,所以16位为两个字节。

4)位结构成员可以与其他结构成员一起使用。

例如:

structinfo{charname[8];intage;structaddraddress;floatpay;unsignedstate:1;unsignedpay:1;}workers;

该例的结构定义了关于一个工人信息。

其中有两个位结构成员,每个位结构成员只有一位,因此只占一个字节但保存了两个信息,该字节中第一位表示工人的状态,第二位表示工资是否已发放。

由此可见使用位结构可以节省空间。

云隐综

1
查看完整版本: 自学C语言书笔记1302结构的复