一、结构体类型定义。
结构体类型和数组类型一样,需要由程序员定义,必须限定以后使用。
struct 类型标识符 { 类型名 成员名; 类型名 成员名; ... };
其中,struct 是结构体类型定义的关键字,他与其后用户指定的类型标识符共同组成结构体类型名。例如学生结构体类型定义如下:
struct st_type { char num[7]; char name[20]; char sex; int age; float score; char address[30]; };
说明:(1)定义结构体类型只是规定了这种数据类型的模型,在编译时并不赋给他存储空间,所以绝对不允许对定义的结构体类型进行存取数据的操作。
(2)结构体成员可以是简单变量、数组或是另一个结构体变量。例如:
struct d_type { int year; int minth; int day; }; struct s_type { char num[7]; char name[21]; char sex; struct d_type birthday; float score; char address[41]; };
(3)结构体成员名可以与程序中其他变量名同名,系统会自动识别它,不会混淆。
(4)结构体类型定义可以放在函数外部(全局有效),放在函数内部(只在本函数内部有用)
二、结构体变量。
1、结构体变量的定义。
(1)一般形式定义。
struct 标识符 { 结构体成员表; }; struct 标识符 结构体变量;
(2)在定义类型的同时,定义变量。
struct 标识符 { 结构体成员表; }结构体变量名表;
2、结构体变量的初始化。
注意:初始化个数不得超过成员数,若小于成员数,则剩余成员将被初始化为默认值。
3、结构体变量的引用。
对结构体变量整体的引用限制较大,只能对他进行一部分操作。
(1)可作为函数的形参,实参或是函数返回值等进行函数的数据传递。
(2)可以整体赋值,但是赋值号左边必须是结构体变量,右边必须的是同一种结构体类型的结构体变量或函数返回值,如:student1=student2;
(3)结构体变量成员的引用。
结构体变量名.成员名
三、结构体数组。(相同类型的结构体做元素就可以构成结构体数组,其中,每个元素内部含有不同类型的成员)
1、结构体数组定义类型。
struct st_type
{
int year;
int month;
int day;
};struct st_type s[3];//定义了一个结构体数组s,他有三个元素,数组中的各元素在内存中是连续存放的。
2、结构体数组初始化。
结构体数组在定义中也可以同时初始化。
结构体类型名 结构体数组名【数组长度】
3、用结构体数组存储学生信息,每个学生有姓名,学号,成绩。
#define N4
#include “stdio.h”
struct {int num;char name[11]; int score;}t,s[N];
main(){int i,j,k;print("请输入第一个学生的学号:");
scanf("%d",&k);}
四、结构体和函数。
1、结构体作函数参数。
结构体成员,可以作为函数实参,形参为与该成员同类型的变量。
void printf(struct st_type s)
{printf("输出: 姓名 性别 年龄 成绩");printf("%s%s%c",s.name,...)}
2、返回值为结构体类型的函数。
结构体类型名 函数名 (形参表)
3、typedef语句。
typedef语句可以为系统已经定义的简单类型(如int double float 等)另起一个名称。也可以为自己定义的结构体枚举等类型另起一个名称。
typedef 类型名 新类型名
如:typedef int INTEGER;就是将int类型名修改为INTEGER
使用typedef语句的优点:(1)可以缩写长的类型定义,使用便于理解的数据类型名,使程序简洁,可读性强。
(2)可将程序参数化,便于移植。