结构就是将基本类型组合在一起形成一个新类型,结构struct主要目地,方便编程和管理代码。比如一个二维平面的点point,有两个值x,y;这时定义成结构struct,编程代码看起来会非常清楚。如果不定义成结构struct用两个变量,当然问题是可以解决,但这样项目变大时将会是个灾难。
结构struct定义:
1 2 3 4 5 6 7 8 |
struct P //定义一个点结构 { double x; double y; }; struct Empty //定义一个空的结构体没有数据成员,这样也可以的 { }; |
结构struct在C++中其实合类class是一样的,只是默认访问方式不同。类默认访问是私有的,结构默认是公有的。看下下面这篇应该知道定义一个空的结构或类,其时C++帮我们定义了一些函数。
?结构struct初始化
可以用像数组初始化方式一样,用大括号{}
1 2 |
P p1 = {11.3,2.2}; P p2 = {11.3}; //可以比定义的数据 |
初始化顺序,按结构成员的定义顺序来进行。
?结构struct变量定义
将P结构当成一个新类型,比较之前的简单类型进行定义;可以定义普通变量,指针变量、引用变量。
1 2 3 4 5 |
int a; P? p1; int* b = new int; p* p2 = new p(); P& p3 = p1; |
?结构struct成员的访问
成员访问方式有两个符号“.”,“->”;
1 2 3 4 |
P? p1 = {11.1,22}; p* p2 = new p(1,2); double a = p1.x; double b = p2->x; |
从上面代码中应该可以看出,用“.”是普通变量,用“->”是指针变量。
?结构中的位域
位域:是指信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位。例如在存放一个开关量时,只有0和1 两种状态, 用一位二进位即可。为了节省存储空间,并使处理简便,C语言又提供了一种数据结构,称为“位域”或“位段”。所谓“位域”是把一个字节中的二进位划分为几 个不同的区域, 并说明每个区域的位数。每个域有一个域名,允许在程序中按域名进行操作。 这样就可以把几个不同的对象用一个字节的二进制位域来表示。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
struct Switch8 { unsigned A1 : 1; unsigned A2 : 1; unsigned A3 : 1; unsigned A4 : 1; unsigned A5 : 1; unsigned A6 : 1; unsigned A7 : 1; unsigned A8 : 1; }; //cout<<sizeof(Switch8)<<endl; //可以用sizeof关键字测试占用字节数 |
这样用8位就定义了一个8位开关,一般这类用在时间定义上,因为时间是60,最多5位就够,还有用在硬体底层的一些定义上。
Wonderful information. With thanks. fluconazole tablets