《结构体指针、结构体做函数参数.ppt》由会员分享,可在线阅读,更多相关《结构体指针、结构体做函数参数.ppt(11页珍藏版)》请在三一办公上搜索。
1、第8章 用户自定义数据类型 指针与结构,851 指向结构体变量的指针变量 在定义一个结构体变量时,系统将在内存中分配一块连续的存储空间,用于存放结构体成员的数据,这块连续存储空间的首地址称为结构体变量的指针(也称为结构体变量的首地址)。可以定义指向结构体变量的指针变量,若把某结构体变量的首地址赋值给一个指针变量,则称这一指针变量指向该结构体变量。指向结构体的指针变量定义格式是:struct 类型名*指针变量名;,第8章 用户自定义数据类型 指针与结构,如下面定义一个结构体类型booktp来存储书的基本信息:,struct booktp char name60;char author30;flo
2、at price;struct datetp unsigned year;unsigned month;pubday;,可以定义结构体变量和指向结构体变量的指针:struct booktp book5,*p;,第8章 用户自定义数据类型 指针与结构,以上定义了p为指向结构体变量的指针变量。若p&book5;,则称指针变量p指向结构体变量book5,此时可用下述三种方式之一存取结构体成员(三种方式是等价的):1结构体变量名成员名 2指针变量名-成员名 3(*指针变量名)成员名 其中“-”是 指向运算符.如有下面程序段:struct booktp*p,book5“C+Buider网络开发实例”,”
3、清汉计算机工作室”,53,2000,9;p&book5;则book5.price、p-price 以及(*p).price 的值都是 530,而book5.pubday.year、p-pubday.year以及(*p).pubday.year 的值都是2000。注意此处(*p),price的圆括号不能少.指针运算符“*”作用于指针变量p上,构成表达式(*p),等价于结构体变量名book5。,第8章 用户自定义数据类型 指针与结构,852 指向结构体数组的指针变量 指向结构体的指针变量也可以指向结构体数组及其元素。例如,下述程序段:struct booktp*p,book3;pbook;如图82
4、0所示,图中假定book0的地址是3000,指针变量p指向结构体数组book的首地址,由于sizeof(struct booktp)的值为 98,每个结构体元素占内存空间98个字节,因此p+l指向地址3098处,p+2指向地址3196处。,图820,第8章 用户自定义数据类型 指针与结构,使用指针变量指向结构体变量或结构体数组时,应注意运算符的优先级:1“()”、”、“-”、“”四个运算符优先级相同,在C语言中具有最高的优先级,运算的结合方向是“从左到右”;2“*”、“十十”、“一一”、“&”四个运算符优先级相同,在C语言优先级的级别仅次于上述的四个运算符,运算的结合方向是“从右到左”。例81
5、6通过一个简单的例子说明指向结构体数组的指针的应用。在程序中,为了说明运算符的优先级和结合方向的用法,改变了书的价格。,main()struct datetp unsigned year;unsigned month;*出版日期*,第8章 用户自定义数据类型 指针与结构,struct booktp char name60;*书名*char author30;*作者*float price;*价格*struct datetp pubday;struct booktp*p,book3“C+Buider网络开发实例”,”清汉计算机工作室”,530,2000,9,“SQLServer循序渐进教程”,”
6、Petkovic”,350,1999,6,“VB开发指南”,”DianneSiebold”,280,2000,9;pbook;printf(”82f,”,+p-price);*橙色表达式等价于+(p-price)*,第8章 用户自定义数据类型 指针与结构,printf(”8.2f,”,(+p)-price);*先计算+p,p指向bookl*printf(”8.2f,”,p+-price);*上述表达式等价于(p+)-price*printf(“8.2fn”,p-price+);*上述表达式等价于(p-price)+*for(pbook;pname,(*p).author,p-pubday.ye
7、ar,p-pubday.month,p-price);,运行结果:5400,3500,3500,2800 C+-Buider网络开发实例舴者:清汉计算机工作室,出版日期:2000年9月,价格:540 SQLServer循序渐进教程,作者:Petkovic,出版日期:1999年6月,价格:350 VB开发指南,作者:DianneSiebold,出版日期:2000年9月,价格:290,运行程序,第8章 结构体作为函数参数,例815#include struct st int a;char b;fun(struct st bc)bca+5;bcbA;printf(”被调函数中成员的值是:d,cn”,
8、bc.a,bc.b);,main()struct st bl;b1a=3;b1bc;fun(b1);printf(”主调函数中成员 的值是:d,cn”,b1.a,b1.b);,运行结果:被调函数中成员的值是:8,A 主调函数中成员的值是:3,c,例816#includestruct st int a;char b;,main()struct st b1;b1.a3;b1.b=c;fun(&b1);printf(”d,cn”,b1.a,b1.b);,fun(struct st*bp)bp-a+5;bp-bA;printf(”d,cn”,bp-a,bp-b);,运行结果:8,A 8,A,例817#
9、define N 3 struct st int num;char name7;float score;main()int i;float avg,inpu_avg(struct st*);struct st studentN;avginpu_avg(student);*结构数组名作为函数的实参*printf(”学号 姓名 成绩n”);for(i0;iN;i+)printf(“4d7s6.1fn”,studenti.num,studenti.name,studenti.score);printf(”平均成绩:41fn”,avg);,float inpu_avg(struct st*p)int i;float temp,avg00;for(i=0;inum,(p+i)-name,&temp);(p+i)-scoretemp;avg+=(p+i)-score;avgavgN;return avg;,运行结果:1 王 军 780 2 吴晓兰 670 3 张 东 925*以上是键盘输入*学号 姓名 成绩 1 王 军 780 2 吴晓兰 670 3 张 东 925 平均成绩:792,
链接地址:https://www.31ppt.com/p-6015427.html