AP计算机科学A(APcomputer science A)复习备考攻略视频教程
42747 人在学
C语言中数组和结构体都是可用于存储数据的,但是数组知识允许存储相同类型的数据变量,而结构体可以允许用户定义一种可用的数据类型用于存储不同类型的数据项。关于结构体中的定义使用以及位域在下文中都会提及。下面我们了解一下关于C语言结构体和C语言位域的知识。
定义结构体
如果你要在电脑中输入一件衣服的数据,你可以在结构体中定义这些数据:公司、材质、价格、大小。而你可以看出除了价格以外都是用字符存储。而数组就不能一次过存储,所以就要用到指针。
struct clothes
{
char com[20];
char mar[20];
int price;
char size[20];
};
上面就是定义了一个可以存储衣服数据的一个结构体。
如果你觉得结构体的名字太长,你可以用typedef为结构体起一个别名。
typedef struct clothes
{
char com[20];
char mar[20];
int price;
char size[20];
}clo;
如何访问结构成员
下面用一段完整的代码说明:
输出结果是:
结构作为参数传递
你可以把结构作为函数参数传递,方式与其它类型变量或者指针一样。用一段简单的代码帮助理解:
结果:
指向结构的指针是什么?
先看看怎么定义
clo c;
clo *a;
a=&c;
这样就用结构定义了一个指针,这个指针用于存储结构c的地址。
如果你想直接用指向结构c的指针访问结构c的成员,你必须使用"->"运算符
下面先看代码帮助理解:
结果:
位域是什么
有些信息在存储时,并不需要占用一个完整的字节,而只需占几个或一个二进制位。例如在在存放一个开关量时,只有 0 和 1 两种状态,用 1 位二进位即可。
为了节省存储空间,并使处理简便,C 语言又提供了一种数据结构,称为"位域"或"位段"。 所谓"位域"是把一个字节中的二进位划分为几个不同的区域,并说明每个区域的位数。例如刚刚的开关变量,在一个字节中有8个二进制位,存放一个开关变量占用一个,剩下7个。
每个域有一个域名,允许在程序中按域名进行操作。这样就可以把几个不同的对象用一个字节的二进制位域来表示。
定义位域:
struct 位域名
{ };
例如:
struct q
{
int a:8;
int b:2;
int c:6;
};
一共定义了三个位域,占了两个字节。
在定义位域的时候要注意的是:一个位域只放在同一字节,就是说如果一个字节中只剩下4个二进制位,而你想定义一个5个二进制位的位域就必须跳到下一个字节中定义。
例如:
struct q
{
int b:4;
int :4; //空域
int c:5;
}
b占4位,后4位不使用,c从第二字节开始,占用5位。还有要注意的是:因为字节是8位,所以一个位域不能超过8.如果最大长度大于计算机的整数字长,一些编译器可能会允许域的内存重叠,另外一些编译器可能会把大于一个域的部分存储在下一个字中。
无名域就是空域,不能使用的,在上面的例子中有说过。
本质上来说位域也就是一种结构类型,不过结构成员是按二进制位分配的。
下面我们用代码来了解位域的使用,
结果:
关于C语言中结构体的知识就先讲这些简单的知识点,只要你能弄懂简单的这些,后面的问题都不大。关键是你看完之后要自己动手去写代码这样你才会记得牢,可以在网上搜索一些关于C编程的题目,帮助自己的练习。
共8节 · 1小时32分钟
¥10.0011967人在学
共74节 · 19小时37分钟
¥39.992915人在学
共28节 · 7小时41分钟
¥399.001594人在学
共19节 · 5小时21分钟
¥399.001663人在学