指向结构体的指针?定义结构体的指针?struct 结构体名*指针名;?如:?struct Student?{? char name[10];? int age;?};?struct Student s;?struct Student *p;?p=&s;用指针访问结构体的成员 (*p).name (*p).age指向结构体的指针?用指针直接访问结构体的成员可以用“->”符号?如上题中可以这样访问:?p->name?p->age?以下三条语句是等价的:?=1; (*p).age=1; p->age=1;?以下是错误的:?=“Jom”; =5;?s->name=“Jake”; s->age=10;?p是一个指针,不是结构体变量,没有“.”操作?S是一个结构体变量,不是指针,没有“->”操作指向结构体的指针?struct Student?{? char name[20];? int age;? int sex;?};?编写一个函数change(),实现两个Student类型的变量的内容交换指向结构体的指针?此题中,函数的形参若定义为:?void change(struct Student s1, struct Student s2)?则形参s1和s2将接收Student类型的实参,是实参的拷贝,对s1和s2进行内容交换,对实参,不会产生任何影响。?因此,该函的形参应该定义为:?void change(struct Student *p1, struct Student *p2)?形参p1和p2是Student类型的指针,将接收Student类型变量的地址,能够通过p1和p2对实参所指向的Student类型变量进行修改。?void change(struct student *s1,struct student *s2)?{struct student temp;?strcpy(,s1->name);?strcpy(s1->name,s2->name);?strcpy(s2->name,);??=s1->age;?s1->age=s2->age;?s2->age=;?=s1->sex;?s1->sex=s2->sex;?s2->sex=;??}指向结构体的指针?具体函数实现2,直接交换?void change(struct student *s1, struct student *s2)?{? struct student temp;? temp=*s1;?*s1=*s2;?*s2=temp;?}?int main()?{?int n,i,mini;?float x,y,mint,t;?struct student student1={"wangyan",23,0};?struct student student2={"zhangsan",24,1};?printf("交换前的信息:\n");?printf("%s %d %d\n",,,);?printf("%s %d %d\n",,,);?printf("交换后的信息:\n");?change(&student1,&student2);?printf("%s %d %d\n",,,);?printf("%s %d %d\n",,,);? return 0;?}运行结果:指向结构体的指针?将一些有序的数据放在数组中时,当发生数据增加和删除时,数组需要大量的移动操作,代价很高。?单项链表:?一个节点通过指针连接着下一个节点。节点的插入和删除只需要修改若干指针就可以,代价比数组小得多。?如:定义结构体用于建立一个学生数据的链表,链表中的学生按照年龄顺序存放。? struct Student?{? char name[20]; ? int age;? struct Student *next; //Student类型的指针,指向下一个学生? };指向结构体的指针Name:JomAge:20Next: Name:LilyAge:14Next: Name:RoseAge:10Next: Name:JakeAge:13Next: 建立链表的结构:
结构体与指针 来自淘豆网www.taodocs.com转载请标明出处.