结构体与共用体小结
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一,结构体的概念和定义
1,结构体的定义
struct 结构体名
{
数据类型成员名1;
数据类型成员名1;
...
};
这里数据类型可以是复合类型,例如又是一个结构体类型,即嵌套;
2,结构体变量的定义
struct 结构体名变量名1,变量名2,,,变量名n;
或:
struct 结构体名
{
数据类型成员名1;
数据类型成员名1;
...
.
.
}结构体变量1,结构体变量2;
或:
struct
{
数据类型成员名1;
数据类型成员名1;
...
}结构体变量1,结构体变量2;
三种方式,第三种方式的话,每次要定义这个类型的结构体变量都要重复的写这
一段代码;
其实定义了结构体后,struct 结构体名就是一种新的类型,上述语句就像声明
变量一样;
3,结构体变量的引用
只能对结构体变量中的各个成员分别输出,不能对一个结构体变量作为一个整体
输出;
嵌套的结构体类型的引用:
结构体变量名.结构体类型成员名.嵌结构体的成员名;
.
.
4,结构体变量的初始化
struct 结构体名变量名= {初始化数据};
或者在定义的时候就初始化:
struct 结构体名
{
数据类型成员名1;
数据类型成员名1;
...
}变量名= {初始化数据};
二,结构体数组
1,结构体数组的定义举例
struct stu
{
int stu_nu;
char name[20];
float score;
};
.
.
struct stu student[5];
或者:
struct stu
{
int stu_nu;
char name[20];
float score;
}student[5];
或者:
struct
{
int stu_nu;
char name[20];
float score;
}student[5];
跟定义结构体变量的三种形式是一样的,只不过这里每次定义的结构体变量是一
个数组;每一个student[i]都是struct stu类型的;
2,结构体数组的初始化和引用
.
.
略;
三,结构体与指针
1,指向结构体的指针的定义,同上,也是三种形式;
struct employees employee1,*p1;
或者:
struct employees
{
...
}employee1,*p1;
或者:
struct
{
...
}employee1,*p1;
然后可进行如下操作:p1 = &employee1;此时p1指向首地址;
2,用结构体变量指针来引用结构体成员的两种操作:
(*结构体变量的指针名).成员名;
.
.
如:(*p1).name;括号不能省略,.的优先级是最高的;
或:
结构体变量的指针名->成员名;
如:p1->name;
注意.和->的优先级是最高的;
;
(*p1).name;
p1->name;
是等价的;
3,结构体数组与指针
struct stu
{
int stu_nu;
char name[20];
float score;
}student[5],*p;
此时可以
(1)把数组student的起始地址赋给p:
.
.
p = student;此时p指向student[0];
(2)也可把student的其他元素的地址赋给p
p = &student[3];
(3)利用指针移动如p++使p指向结构体数组的不同元素;
四,结构体作为函数参数
1,结构体变量作为函数参数
2,指向结构体变量的指针作为函数参数
略,在后续文章里将给出一个例子;
共用体的概念
在C++语言中,不同数据类型的数据可以使用共同的存储区域,这种数据构造类型称为共用体,简称共用,又称联合体。共用体在定义、说明和使用形式上与结构体相似。两者本质上的不同仅在于使用存的方式上。定义一个共用体类型的一般形式为:
union 共用体名
{
成员表列;
};
例如:
union gyt
.
.
{
int i;
char c;
float f;
};
就定义了一个共用体类型union gyt,它由三个成员组成,这三个成员在存中使用共同的存储空间。由于共用体路各成员的数据长度往往不同,所以共用体变量在存储时总是按其成员中数据长度最大的成员占用存空间。如:共用体类型union gyt的变量占用4个字节的存。
在这一点上共用体与结构体不同,结构体类型变量在存储时总是扫各成员的数据长度之和占用存空间。如,定义了一个结构体类型:
struct gyt
{
int i;
char c;
float f;
};
则结构体类型struct gyt的变量占用的存为2+1+4个字节,也就是7个字节。
定义共用体变量的方法与定义结构体类型变量的方法相似,也有三种方法:
union 共用体名
{
.
.