参考清华大学软件学院 谌卫军 《c语言程序设计》课件
1、结构体的定义和使用
1.1、结构体的定义
形式1:struct <结构体标记>
{
类型名1 成员变量1;
......
类型名n 成员变量n;
};
形式2:
typedef struct
{
类型名1 成员变量1;
......
类型名n 成员变量n;
}<结构体类型名>;
2、定义结构体变量
形式1:struct <结构体标记> 变量1,变量2,...;
形式2:<结构体类型名> 变量1,变量2,...;
例如1:
struct student_tag
{
char ID[7];
char name[20];
char gender;
int age;
char phone[9];
char addr[30];
};
typedef struct
{
char ID[7];
char name[20];
char gender;
int age;
char phone[9];
char addr[30];
}student_T;
定义1:struct student_tag x;
定义2:student_T x;
sizeof(x)= 72
定义3:struct student_tag
{
char ID[7];
char name[20];
char gender;
int age;
char phone[9];
char addr[30];
}x,y;
1.2、结构体变量的使用
访问方式:结构体变量名.成员变量名
student_T x;
strcpy(x.ID,"020449");
strcpy(x.name,"Zhang");
scanf("%c",&x.gender);
x.age = 19;
strcpy(x.phone,str);
scanf("%s",x.addr);
注意1:①不能直接比较两个结构体变量(==、!=);②不能用scanf/printf来输入或输出整个结构体变量;
注意2:①能够进行结构体变量的整体赋值,如student_T x,y; y=x;②能够定义一个返回值类型为结构体类型的函数
2、结构体数组与指针
2.1、结构体数组
student_T stu[1000];或者是struct student_tag stu[1000];
2.2、结构体与指针
一种新的指针类型:基类型为结构体类型的指针类型。
StudentRecord_T x,*px;
...
px=&x;
如何访问x的成员变量:
①x.成员变量名,如:x.name,x.id;
②(*px).成员变量名,如:(*px).name,(*px).id;
③px->成员变量名,"->"称为指向运算符或箭头运算符,如:px->name,px->id
StudentRecord_T a[10];
StudentRecord_T *px;
...
px = a;
px指向a[0];
px+1指向a[1];
...
px+i指向a[i];
3、结构体作为函数参数
/*问题描述:已知一条直线的2个端点坐标,计算该直线的中点的坐标。*/
/*用一个结构体来描述一个点*/
typedef struct
{
double x,y;
}point_T;
point_T midpoint(point_T pt1,point_T pt2);
void main()
{
point_T a ={0.0,0.0},b={5.0,10.0},m;
m = midpoint(a,b);
}
point_T midpoint(point_T pt1,point_T pt2)
{
point_T mid;
mid.x = (pt1.x + pt2.x)/2.0;
mid.y = (pt1.y + pt2.y)/2.0;
return(mid);
}
void main()
{
point_T a = {0.0,0.0},b = {5.0,10.0},m;
set_midpoint(&a,&b,&m);
}
void set_midpoint(point_T *pt1,point_T *pt2,point_T *mid)
{
mid->x = (pt1->x + pt2->x)/2.0;
mid->y = (pt1->y + pt2->y)/2.0;
}