资源描述:
《《结构体与指针》PPT课件》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、复习:(1)结构体变量的定义与引用(2)结构体数组新内容:(1)指向结构体变量的指针(2)指向结构体数组的指针(3)结构体指针作为函数参数(4)用指针处理链表第7讲结构体与指针1复习:结构体变量的定义与引用注意不要忘了分号成员列表结构体类型定义形式:struct结构体类型名{数据类型成员名1;数据类型成员名2;::数据类型成员名n;};关键字用户定义的标识符22.定义结构体类型同时定义变量structstudent{charname[10];intage;ints1,s2;}st1,st2;1.先定义结构体类型,再定义变量structstudent{ch
2、arname[10];intage;ints1,s2;};structstudentst1,st2;复习:结构体变量的定义与引用结构体变量的定义结构体类型定义结构体变量定义结构体变量占用的字节数可用sizeof运算符算出printf(“%d”,sizeof(structstudent));printf(“%d”,sizeof(st1));3复习:结构体变量的定义与引用例:structdate{intyear;intmonth;intday;};structstud{charname[10];structdatebirthday;ints1,s2;
3、};结构体类型可以嵌套定义或:structstud{charname[10];structdate{intyear;intmonth;intday;}birthday;ints1,s2;};4复习:结构体变量的定义与引用应用typedef定义结构体类型structstudent{charname[10];intage;ints1,s2;};structstudentst1,st2;typedefstructstudent{charname[10];intage;ints1,s2;}SD;SDst1,st2;优点:书写简单,使程序具有更好的移植性5复习:结
4、构体变量的定义与引用引用结构体变量中的成员(点记法)格式:结构体变量名.成员名structstudent{charname[10];intage;ints1,s2;}st1,st2;strcpy(st1.name,“Mary”);st1.age=21;scanf(“%d%d”,&st1.s1,&st1.s2);相同类型的结构体变量可以进行整体赋值只能对结构体变量的成员进行输入和输出st2=st1;611.6.1指向结构体数据的指针定义指向结构体变量的指针typedefstructstudent{charname[20];intage;ints1,s2;}
5、SD;SDx,stu,*p;p=&stu;成员的引用格式(1)结构体变量名.成员名stu.name例:scanf(“%s”,x.name);scanf(“%d”,&x.age);x.s1=89;x.s2=78;gets(stu.name);(*p).age=21;scanf(“%d”,&p->s1);p->s2=90;(2)(*指针变量名).成员名(*p).age(3)指针变量名->成员名p->s17赋值语句p=&student;指针变量p指向结构体变量student引用结构体中的成员变量:(*p).成员名或p->成员名相当于student.成员名pst
6、udent8说明:和成员运算符一样,“->”为指向运算符,是运算优先级最高的运算符。由于成员运算符“.”的运算优先级高于运算符“*”,因此(*p).成员名中()不能少。*p.成员名p=&student.score;不能用指向某个结构体变量的指针指向该结构体变量的某个成员。9对结构体数组及其元素可以用指针来指向例如:structstruct_name{charname[10];intnum;floatscore;};/*定义结构体类型标识符*/structstruct_namestd[30],*p;11.6.1指向结构体数组的指针10900390赵明879
7、002王建899001李红结构体数组stdstd[0]std[1]std[2]p赋值语句p=std;/*p指向一个结构体数组std*//*指针变量p存放的是数组std的首地址*/引用:p->name;p->num;p->score;11赵明909003879002王建899001李红结构体数组stdstd[0]std[1]std[2]思考:赋值语句p=std+1;和p++;分别代表指针p指向哪里?p->name;p->num;p->score;代表的信息发生了什么变化?pp12注意:以下赋值语句都是错误的:p=&std[1].score;(不能指向数组元
8、素的成员变量)p=&std;(数组名本身就代表该数组的首地址,因此不能使用地址运