结构体类型
结构体类型的一般形式如下:
struct结构体表示名
{类型名1 结构体成员名表1;
类型名2 结构体成员名表2;
……
类型名n 结构体成员名表n;
};
其中struct是关键字,是结构体的标志。“结构体标识名”和“结构体成员名”都是用户定义的标识符。“结构体标识名”是可选项。每个“结构体成员名表”中都可包含有多个同类型的成员名,他们之间用逗号隔开。结构体中的成员名可以和程序中的其他变量同名;不同的结构体中的成员也可以同名。
例:定义一个日期的结构体类型
Structdate
{intyear;
int month;
int day;
};
结构体类型的说明只是列出了该结构的组成情况,标志着这种类型的结构模式已存在,编译程序并没有因此而分配内存空间。真正占有内存的是具有相应结构类型的变量、数组和动态开辟的存储空间,只有这些实体才可以用来存放结构体中的数据。因此在使用结构体变量、数组和指针变量之前,必须对这些变量进行定义。
结构体类型的变量、数组和指针变量的定义
1.先定义结构体类型,再单独进行变量定义。
struct student
{
charname[12];
charsex;
structdate birthday;
floatscore[4];
};
struct student std,per[4], *pstd;
此处先说明了结构体类型struct student,再由一条单独的语句定义了结构体变量std、结构体数组pers和结构体指针变量pstd。
2.紧跟在结构体类型说明之后进行定义。例如
struct student
{
charname[12];
charsex;
structdate birthday;
floatscore[4];
}std, per[4], *pstd;
3.再说明一个无名结构体的同时,直接进行定义。如
Struct
{
charname[12];
charsex;
structdate birthday;
floatscore[4];
}std, per[4], *pstd;
4.使用typedef说明一个结构体类型名,再用新类型名来定义变量。如
typedef struct
{
charname[12];
charsex;
structdate birthday;
floatscore[4];
}student;
student std, per[4],*pstd;
对结构体变量的初始化及引用
1,对结构体变量进行初始化
所赋初值顺序放在一个花括号中,如
struct student
{
charname[12];
charsex;
structdate birthday;
floatscore[4];
}std = {"LiMing",'M',1980,5,10,88.0,90.0,85.5,97.0};
2.对结构体变量的引用
(1).因为结构体变量是一个整体,要访问它其中的一个成员,必须找到该结构体变量,然后再从中找出它其中一个成员。
如下:结构体变量名.成员名
(2).如果结构体类型中有嵌套一个结构体类型,则访问一个成员时,应采用逐级访问的方法,直接得到所需访问的成员为止。
例:std.birthday.year
(3).可以对结构体变量的成员进行各种有关的运算。
如:std.score[0]=std.score[1]+std.score[2];
std.birthday.day++;
(4).可以将一个结构体变量作为一个整体赋给另一个具有相同类型的结构体变量。
如:
struct student
{
charname[12];
charsex;
structdate birthday;
floatscore[4];
}std = {"LiMing",'M',1980,5,10,88.0,90.0,85.5,97.0};
struct studentstden;
stden = std;
结构体变量作为函数参数
1.想函数传递结构体变量的成员
2.想函数传递结构体变量
3.传递结构体的地址
4.函数的返回值是结构体类型
例:通过函数返回结构体类型的值
#include"stdio.h"
typedef struct
{
inta;
charb;
}ST;
ST fun(ST x)
{
x.a= 99;
x.b= 's';
returnx;
}
int main()
{
STy;
y.a= 0;
y.b= 'A';
printf("y.a=%d,y.b=%c\n",y.a, y.b);
y= fun(y);
printf("y.a=%d,y.b=%c\n",y.a, y.b);
return0;
}
输出结果如下:
y.a=0,y.b=A
y.a=99,y.b=s
5.函数的返回值可以是指向结构体变量的指针
例:通过函数的返回值返回指向结构体变量的指针
#include"stdio.h"
typedef struct
{
inta;
charb;
}ST;
ST * fun(ST *x)
{
ST* px;
(*x).a= 100;
(*x).b= 'C';
px= x;
returnpx;
}
int main()
{
STy,*p;
y.a= 0;
y.b= 'A';
printf("y.a=%d,y.b=%c\n",y.a, y.b);
p= fun(&y);
printf("y.a=%d,y.b=%c\n",(*p).a, (*p).b);
return0;
}
输出结果如下:
y.a=0,y.b=A
y.a=100,y.b=C