第11章 结构体、共同体和枚举类型.ppt
文本预览下载声明
11.4 结构体类型指针 当把一个结构体变量的起始地址赋值给一个指针变量时,就称该指针指向这个结构体变量,该指针为结构体类型指针。 11.4.1 结构体指针的定义 定义形式为: 结构体类型 *指针变量名; 例如, struct student { int num ; char name[20]; float score; }wang,stud[3]; struct student *p,*q; 令p=wang; q=stud;则指针的指向关系如图所示: 1003 WangWu 85 wang p 1001 ZhangSan 93 1002 LiSi 90.5 stud[0] stud[1] q … q+1 11.4.2 通过结构体指针引用结构体变量 有了指向结构体变量的指针,就可以通过结构体指针来引用结构体变量,当然就可以通过结构体指针来引用结构体成员。 (1)指针变量-结构体成员名 例如: p-num p-name p-score (2)(*指针变量).结构体成员名 例如: (*p).num (*p).name (*p).score 一般习惯使用运算符“-”来标记。 课堂练习:请指出下列程序的错误所在: struct person { char name[20]; int count; } x1={ZhongHua, 10}; void main( ) { int *p; p=x1; printf (%s\n%d\n, (*p).name, (*p).count) } 错误的原因:p不是结构指针变量 可改为:struct person *p 【例11.3】通过结构体指针输出结构体数组。 #include stdio.h struct date { int year; int month; int day; }; struct student { int num ; char name[20]; char sex; struct date birthday; }; struct student stud[4]={{1001,ZhangSan,M,{1986,4,19}}, {1002,LiSi,F,{1987,9,25}}, {1003,WangWu,M,{1986,12,1}}, {1004,ZhaoLiu,F,{1987,5,16}}}; void main() { struct student *p; printf( No Name Sex Birthday \n); for(p=stud;pstud+4;p++) { printf(%6d ,p-num); printf(%10s ,p-name); printf(%4c ,p-sex); printf(%8d-%2d-%2d\n,p-birthday.year, p- birthday.month,p-birthday.day); } } 11.4.3 结构体指针作函数参数 结构体变量作函数参数: 进行整体传送。这种传送要将结构体变量的全部成员逐个传送,时间和空间开销很大,效率低。 指针变量作函数参数: 由实参传向形参的只是结构体变量的地址,从而减少了时间和空间的开销。 【例11.4】用函数调用方式,改写例11.3,编写一个专门的显示函数display()来输出结构体数组的内容,通过主函数调用来实现显示。 #include stdio.h struct student { int num; char name[20]; float score; }stud[]={{1001,ZhangSan,93}, {1002,LiSi,90.5}, {1003,Wan
显示全部