结构体与指针.pptVIP

  • 8
  • 0
  • 约5.31千字
  • 约 22页
  • 2016-06-06 发布于湖北
  • 举报
定义结构体的指针 struct 结构体名 *指针名; 如: struct Student { char name[10]; int age; }; struct Student s; struct Student *p; p=s; 用指针访问结构体的成员 (*p).name (*p).age * 指向结构体的指针 用指针直接访问结构体的成员可以用“-”符号 如上题中可以这样访问: p-name p-age 以下三条语句是等价的: s.age=1; (*p).age=1; p-age=1; 以下是错误的: p.name=“Jom”; p.age=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(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-sex=s2-sex; s2-sex=temp.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,student1.name,student1.age,student1.sex); printf(%s %d %d\n,student2.name,student2.age,student2.sex); printf(交换后的信息:\n); change(student1,student2); printf(%s %d %d\n,student1.name,student1.age,student1.sex); printf(%s %d %d\n,student2.name,student2.age,student2.sex); return 0; } * 运行结果: * 指向结构体的指针 将一些有序的数据放在数组中时,当发生数据增加和删除时,数组需要大量的移动操作,代价很高。 单项链表: 一个节点通过指针连接着下一个节点。节点的插入和删除只需要修改若干指针就可以,代价比数组小得多。 如:定义结构体用于建立一个学生数据的链表,链表中的学生按照年龄顺序存放。 struct Student { char name[20]; int age; struct Student *next; //Student类型的指针,指向下一个学生 }; * 指向结构体的指针 Name: Jom Age: 20 Next: Name: Lily

文档评论(0)

1亿VIP精品文档

相关文档