文档介绍:第11章指针与结构体卢老师个人中心http://iask./h/?uid=872340131指针与结构体学习用指针引用结构体的成员学习如何进行动态存储分配及管理掌握单链表的构造及操作方法了解循环链表和双向链表的构造和基本操作。2一个结构体变量的指针就是该变量的所占据的内存段的起始地址。引入结构体型指针的目的1、结构体型指针作为函数参数传递数据非常有效;2、结构体型数组的指针可提高数组的访问效率;3、可建立动态的数据结构,动态地、合理地分配内存。指针与结构体3下面从三个内容详细介绍结构体型指针:(1)指向结构体型变量的指针;(2)指向结构体型数组的指针;(3)用指向结构体型的指针做函数参数。4结构体变量也有地址。指向结构体变量的指针中可以存放一个结构体类型变量所占内存单元的首地址。前面我们学习了由用户自己指定的一种数据结构—结构体(一组有相互联系关系的数据集合)定义了一个结构体类型的变量。例如:structstudent{intnum;charname[20];charsex;intage;};structstudentx;[20]sexagex5一、指向结构体型变量的指针:定义形式:结构体类型说明符*指针变量名;如:structstudent*p;intnumcharname[20]char sexintagep定义一个结构体指针之后,编译程序只给其分配一个用于存放地址的空间,但它并没有具体的指向,必须将一个结构体变量的地址或结构体数组元素的地址赋给它。结构体变量的地址必须通过取地址符“&”取得。例如:p=&x;变量x6引用方式结构体成员的引用是以圆点作为连接符的。例如:,,若执行了语句p=&x;则可通过指针p来引用x的成员(*p).name也可用箭头操作符“->”来引用x的成员p->name7引用方式(1)(2)(*指针变量名).成员名(3)指针变量名->成员名(->为指向运算符)注意:以下表达式的含义(->的优先级高于++);p->np>n++++p->n8引用方式(1)(2)(*指针变量名).成员名(3)指针变量名→成员名注意:以下表达式的含义(→的优先级高于++);p→n得到成员n的值p→n++得到成员n的值,用完该值后使它加1++p→n得到成员n的值,使之先加1,再使用9说明:(1)不可以写成*,因为“.”的级别高于“*”.(2)箭头运算符“->”是由一个减号和一个大于号组成,且运算优先级最高。结构体指针只能指向结构体类型的变量,不能指向其成员。(3)结构体指针指向的变量进行输入输出操作,可用如下语句实现:输入形式:scanf(“%s%d%d%f”,(*p).name,&(*p).num,&(*p).age,&x);(*p).score=x;/*用一实型变量间接给score赋值*/或者:scanf(“%s%d%d%f”,p->name,&p->num,&p->age,&x);p->score=x;输出形式:printf(“%s\n%d\n%d\n%f\n”,(*p).name,(*p).num,(*p).age,(*p).score);printf(“%s\n%d\n%d\n%f\n”,p->name,p->num,p->age,p->score);10