结构体指针、结构体做函数参数.ppt

上传人:zhu****ei 文档编号:2850646 上传时间:2019-12-02 格式:PPT 页数:11 大小:216KB
返回 下载 相关 举报
结构体指针、结构体做函数参数.ppt_第1页
第1页 / 共11页
结构体指针、结构体做函数参数.ppt_第2页
第2页 / 共11页
结构体指针、结构体做函数参数.ppt_第3页
第3页 / 共11页
点击查看更多>>
资源描述
第8章 用户自定义数据类型 指针与结构,851 指向结构体变量的指针变量 在定义一个结构体变量时,系统将在内存中分配一块连续的存储空 间,用于存放结构体成员的数据,这块连续存储空间的首地址称为结 构体变量的指针(也称为结构体变量的首地址)。可以定义指向结构体 变量的指针变量,若把某结构体变量的首地址赋值给一个指针变量, 则称这一指针变量指向该结构体变量。指向结构体的指针变量定义格式是: struct 类型名 * 指针变量名;,第8章 用户自定义数据类型 指针与结构,如下面定义一个结构体类型booktp来存储书的基本信息:,struct booktp char name60 ; char author30; float 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网络开发实例”,”清汉计算机工作室”, 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; 如图820所示,图中假定book0的地址是3000,指针变量p指向结构体数 组book的首地址,由于sizeof(struct booktp)的值为 98,每个结构体元素 占内存空间98个字节,因此p+l指向地址3098处,p+2指向地址3196处。,图820,第8章 用户自定义数据类型 指针与结构,使用指针变量指向结构体变量或结构体数组时,应注意运算符的优先级: 1“( )”、” ”、“-”、“”四个运算符优先级相同,在C语言中具有 最高的优先级,运算的结合方向是“从左到右”; 2“*”、“十十”、“一一”、“&”四个运算符优先级相同,在C语言优先 级的级别仅次于上述的四个运算符,运算的结合方向是“从右到左”。 例816通过一个简单的例子说明指向结构体数组的指针的应用。在 程序中,为了说明运算符的优先级和结合方向的用法,改变了书的价格。,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循序渐进教程”,”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.year,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”,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 #include struct 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 #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,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!