C语言程序设计教程 李淑华 第16讲 结构体与共用体新.ppt
文本预览下载声明
10.5 结构体数组 10.5.2 结构体数组的初始化 结构体数组初始化的一般形式是在定义数组的后面加上={初值列表}; 如: struct student {int num; ┆ } struct student stu[ ]={{----},{----},----,{----}}; 10.5.3 举例 例10.3 对选举人得票的统计程序。设有三个候选人,每次输入一个得票的候选人的名字,要求最后输出每人得票结果。程序如下: struct person {char name[20]; int count; } leader[3]={“Li”,0,”Zhang”,0,”Wang”,0}; main() {int I,j; char name[20]; for(i=1;i=10;i++) {scanf(“%s”,name); for(j=0;j3;j++) if(strcmp(name,leader[j].name)leader[j].count++;} printf(“\n”); for(i=1;i3;i++) printf(“%5s:%d\n”,leader[i].name,leader[i].count);} 10.6 指向结构体类型数据的指针 一个结构体变量指针就是该变量所占据的内存起始地址。可以设一个指针变量,用来指向一个结构体变量,此时该指针变量的值是结构体变量的起始地址。指针变量也可以用来指向结构体数组中的元素。 10.6.1 指向结构体变量的指针 例10.4 main() {struct student{ long int num; char name[20]; char sex; float score; }; struct student stu1; struct student *p; p=stu1; stu1.num=99001; strcpy(stu1.name,”Li Lin”); stu1.sex=‘M’; stu1.score=89.5; printf(“No.%ld\n name:%s\n sex:%c\n score:%f\n”,stu1.num,stu1.name,stu1.sex,stu1.score); printf(“\nNo.%ld\n name:%s\n sex:%c\n score:%f\n”,(*p).num,(*p).name,(*p).sex,(*p).score); } 在C语言中,为了使用的方便和使之直观,可 以把(*p).num改用p-num来代替,即:p所指向的 结构体变量中的num成员。 以下三种形式等价: (1)结构体变量.成员名; (2)(*p).成员名; (3)p-成员名; 其中p-称为指向运算符。 P-n 得到p指向的结构体变量中的成员n的值。 P-n+1 得到p指向的结构体变量中的成员n的值,用完该值后使它加1。 ++P-n 得到p指向的结构体变量中的成员n的值使之加1(先加)。 10.6.2 指向结构体数组的指针 对结构体数组及其元素也可以用指针或指针变量来指向。 例10.5 struct student {int num; char name[20]; char sex; int age;}; struct student stu[3]={{99001,”Li Lin”,’M’,18},{99002,”Zhang Fan”,’M’,19},{99003,”Wang Min”,’F’,20}}; main() {struct student *p; printf(“No. Name sex age\n”); for(p=stu;pstu+3;p++) printf(“%5d%-20s %2c%4d”,p-num,p-name,p-sex,p-age);} 注意: (1)如果p的初值为stu,即指向第一个元素,则p +1后指向下一个元素的起始地址。 例如: (++p)-num先使p自加1,然后得到它指向的元素中的num成员值(即99002) (p++)-num 先得到p-num的值(即99001),然后使p自加1,指向stu[1]。 (2)指针p已定义为指向struct student类型的数据,它只能指向一个结构体数据(也就是p的值是stu数组的一个元素的起始地址);而不能指向一个元素中的某一成员(即p 的地址不能中成员的地址)。 * * 10.5.1结构体数组的定义 (1)先定义结构体类型再定义结构体数组。 如: struct student {int num; char name[20]; ch
显示全部