资源描述:
《《结构体与指针》PPT课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、指向结构体的指针定义结构体的指针struct结构体名*指针名;如:structStudent{charname[10];intage;};structStudents;structStudent*p;p=&s;用指针访问结构体的成员(*p).name(*p).age指向结构体的指针用指针直接访问结构体的成员可以用“->”符号如上题中可以这样访问:p->namep->age以下三条语句是等价的:s.age=1;(*p).age=1;p->age=1;以下是错误的:p.name=“Jom”;p.age=5;s->name=“Jake”;s->age=10;p是一个指针,不是结构体变量
2、,没有“.”操作S是一个结构体变量,不是指针,没有“->”操作指向结构体的指针structStudent{charname[20];intage;intsex;};编写一个函数change(),实现两个Student类型的变量的内容交换指向结构体的指针此题中,函数的形参若定义为:voidchange(structStudents1,structStudents2)则形参s1和s2将接收Student类型的实参,是实参的拷贝,对s1和s2进行内容交换,对实参,不会产生任何影响。因此,该函的形参应该定义为:voidchange(structStudent*p1,structStude
3、nt*p2)形参p1和p2是Student类型的指针,将接收Student类型变量的地址,能够通过p1和p2对实参所指向的Student类型变量进行修改。voidchange(structstudent*s1,structstudent*s2){structstudenttemp;strcpy(temp.name,s1->name);strcpy(s1->name,s2->name);strcpy(s2->name,temp.name);temp.age=s1->age;s1->age=s2->age;s2->age=temp.age;temp.sex=s1->sex;s1->s
4、ex=s2->sex;s2->sex=temp.sex;}指向结构体的指针具体函数实现2,直接交换voidchange(structstudent*s1,structstudent*s2){structstudenttemp;temp=*s1;*s1=*s2;*s2=temp;}intmain(){intn,i,mini;floatx,y,mint,t;structstudentstudent1={"wangyan",23,0};structstudentstudent2={"zhangsan",24,1};printf("交换前的信息:");printf("%s%d%d
5、",student1.name,student1.age,student1.sex);printf("%s%d%d",student2.name,student2.age,student2.sex);printf("交换后的信息:");change(&student1,&student2);printf("%s%d%d",student1.name,student1.age,student1.sex);printf("%s%d%d",student2.name,student2.age,student2.sex);return0;}运行结果:指向结构体的指针将一些
6、有序的数据放在数组中时,当发生数据增加和删除时,数组需要大量的移动操作,代价很高。单项链表:一个节点通过指针连接着下一个节点。节点的插入和删除只需要修改若干指针就可以,代价比数组小得多。如:定义结构体用于建立一个学生数据的链表,链表中的学生按照年龄顺序存放。structStudent{charname[20];intage;structStudent*next;//Student类型的指针,指向下一个学生};指向结构体的指针Name:JomAge:20Next:Name:LilyAge:14Next:Name:RoseAge:10Next:Name:JakeAge:13Next:
7、建立链表的结构:指向结构体的指针建立链表所需的东西:定义链表中每个节点所属的结构体类型,此结构体类型中应当有指向下一节点的指针structStudent{charname[20];intage;structStudent*next;};记录链表头节点的指针structStudent*head;指向结构体的指针建立链表(向链表中添加节点)的函数:voidaddStudent(structStudent*head,structStudents){s.next=null;//先将s的n