结构体
结构体在使用的过程中,要先定义结构体类型,在定义结构体变量。简单类型是由系统直接定义的,如int、float、char,可以直接引用。而结构体类型需要由程序员定义,必须先定义后引用。
结构体类型定义的一般格式如下:
struct <结构标记>
{
成员1;
成员2;
...
成员n;
}; /*必须以分号结尾*/
struct是结构体类型的关键字,他与用户指定的类型标识符共同组成结构体类型名。花括号中的结构体成员表由若干成员定义组成,每一个成员定义的格式如下:类型名 成员名
例如
struct date
{
int year;
int month;
int day;
};
不能对定义的结构体类型进行赋值或运算
结构体变量的定义:
(1)先定义结构体类型在定义结构体变量
struct student /*定义结构体类型*/
{
...
};
struct student stu1,stu2; /*定义结构体变量*/
(2)在定义结构体类型的同时定义结构体变量
struct student
{
...
}stu1,stu2;
(3)不定义类型名,直接定义结构体变量
struct
{
...
}stu1,stu2;
结构体变量的使用
结构体变量的初始化一般格式如下:
结构体类型名 结构体变量={初始值表};l
例如:void main()
{
struct date stu1={1990,3,5};
}
未进行初始化时为默认值,整数和浮点数默认为0,字符和字符串默认值为'\0'.只能在定义结构体变量时使用该初始化格式。
结构体变量成员的引用:结构体变量名.成员名
“.”是结构体成员运算符
对结构体变量整体的引用:
(1)可作为函数的形参、实参或函数返回值来进行函数的数据传递。
(2)两个结构体变量的类型相同时,可以互相整体赋值。stu1=stu2;
(3)不可以对结构体变量进行逻辑操作,但可以逐个的比较成员。
结构体数组的定义
struct student stu[3] /*定义结构体数组stu,数组长度为3*/
与结构体的定义和使用类似。
结构体与函数
结构体做函数参数 :
(1)把结构体变量的每个成员作为函数调用的实参进行传递
(2)结构体变量整体做函数的参数。在函数中对形参结构体变量成员的修改并不能反映到实参中,因此需要函数将整个结构体变量值返回给调用函数,这样被调用函数在定义是就必须以结构体类型作为函数的返回值。定义返回值为结构体类型的函数的一般形式如下
结构体类型名 函数名(形参表)
(3)使用指针以参数形式来传递结构体变量。
共用体
共用体的关键字为union,定义形式与结构体的定义形式一致。
共用体的各个成员共享同一段内存,而结构体的各个成员都有各自的内存空间。
共用体变量的初始化,初始化一个共用体变量,只能用一个值进行初始化。
引用时也通过“.” 。