前言
存储使用一组有关联的数据通常使用数组,但现实中不同类型的数据往往也有重要联系,如,一个学生的年龄为int型,姓名为char型,分数为float型;
而数组类型固定,无法直接存储不同类型数据;
1.结构体类型建立
形式:struct 结构体名
{member list};
建立stu类型存放学生学号,姓名,成绩;
struct stu
{int num;
char name[20];
float score;
};//注意有分号
用花括号包括内部成员(member)类型,stu为该结构体名。
该部分常放在main函数前,main函数中再定义结构体变量。
2.定义初始化结构体变量
前文建立一类型,未定义变量。
声明类型的同时定义变量:
struct 结构体名
{member list}变量名;
先声明后定义:
struct 类型名 变量名
初始化形式:
变量名={各元素,逗号分隔};
或一步到位:
struct 类型名 变量名={各元素,逗号分隔};
struct stu
{int num;
char name[20];
float score;
}stu1={2356,"Li",100};
3.结构体变量引用赋值
a.如上例,可将stu.num,stu.name等作为一般变量引用和赋值。
b.特殊地,对字符串不能用=赋值,应使用strcpy;
c.同类型结构体变量可直接用变量名互相赋值;
stu.num=2356;
strcpy(stu.name,"Li");
4.结构体数组
a.定义形式:
struct 结构体名
{member list}数组名[长度]
可同时初始化,形式类似数组初始化。
struct student
{int num;
char name[20];
}stu[3]={12,"li",23,"zhang",56,""liu};
5.结构体指针
a.事实上,结构体变量还可以是数组,其他结构体变量,以及指针等。
b.结构体名一样储存首元素地址,可定义结构体指针与其指向同处;
struct student stu1;
struct student *p;//指针类型需一致
p=&stu1;
c.p++代表每次加结构体变量长度,结构体数组中常用。
若p=&stu[0].num,则p+1等于&stu[1].num.
d.用指针引用成员时,形式为
*(p).num 等价于p->num,
//p指向结构体变量,"->"为指向运算符。