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

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

ID:52135425

大小:216.00 KB

页数:11页

时间:2020-04-01

结构体指针、结构体做函数参数.ppt_第1页
结构体指针、结构体做函数参数.ppt_第2页
结构体指针、结构体做函数参数.ppt_第3页
结构体指针、结构体做函数参数.ppt_第4页
结构体指针、结构体做函数参数.ppt_第5页
资源描述:

《结构体指针、结构体做函数参数.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第8章用户自定义数据类型——指针与结构8.5.1指向结构体变量的指针变量在定义一个结构体变量时,系统将在内存中分配一块连续的存储空间,用于存放结构体成员的数据,这块连续存储空间的首地址称为结构体变量的指针(也称为结构体变量的首地址)。可以定义指向结构体变量的指针变量,若把某结构体变量的首地址赋值给一个指针变量,则称这一指针变量指向该结构体变量。指向结构体的指针变量定义格式是:struct类型名*指针变量名;第8章用户自定义数据类型——指针与结构如下面定义一个结构体类型booktp来存储书的基本信息:structbooktp{charname[60];charauthor[30];

2、floatprice;structdatetp{unsignedyear;unsignedmonth;}pubday;};可以定义结构体变量和指向结构体变量的指针:structbooktpbook5,*p;第8章用户自定义数据类型——指针与结构以上定义了p为指向结构体变量的指针变量。若p=&book5;,则称指针变量p指向结构体变量book5,此时可用下述三种方式之一存取结构体成员(三种方式是等价的):1.结构体变量名.成员名2.指针变量名->成员名3.(*指针变量名).成员名其中“->”是指向运算符.如有下面程序段:structbooktp*p,book5={“C++Buide

3、r网络开发实例”,”清汉计算机工作室”,53,{2000,9}};p=&book5;则book5.price、p->price以及(*p).price的值都是53.0,而book5.pubday.year、p->pubday.year以及(*p).pubday.year的值都是2000。注意此处(*p),price的圆括号不能少.指针运算符“*”作用于指针变量p上,构成表达式(*p),等价于结构体变量名book5。第8章用户自定义数据类型——指针与结构8.5.2指向结构体数组的指针变量指向结构体的指针变量也可以指向结构体数组及其元素。例如,下述程序段:structbooktp*p

4、,book[3];p=book;如图8.20所示,图中假定book[0]的地址是3000,指针变量p指向结构体数组book的首地址,由于sizeof(structbooktp)的值为98,每个结构体元素占内存空间98个字节,因此p+l指向地址3098处,p+2指向地址3196处。98个字节98个字节98个字节pp+1p+2300030983196book[0]book[1]book[2]图8.20第8章用户自定义数据类型——指针与结构使用指针变量指向结构体变量或结构体数组时,应注意运算符的优先级:1.“()”、”[]”、“->”、“.”四个运算符优先级相同,在C语言中具有最高的优

5、先级,运算的结合方向是“从左到右”;2.“*”、“十十”、“一一”、“&”四个运算符优先级相同,在C语言优先级的级别仅次于上述的四个运算符,运算的结合方向是“从右到左”。[例8.16]通过一个简单的例子说明指向结构体数组的指针的应用。在程序中,为了说明运算符的优先级和结合方向的用法,改变了书的价格。main(){structdatetp{unsignedyear;unsignedmonth;};/*出版日期*/第8章用户自定义数据类型——指针与结构structbooktp{charname[60];/*书名*/charauthor[30];/*作者*/floatprice;/*价

6、格*/structdatetppubday;};structbooktp*p,book[3]={{“C++Buider网络开发实例”,”清汉计算机工作室”,53.0,{2000,9}},{“SQLServer循序渐进教程”,”Petkovic”,35.0,{1999,6}},{“VB开发指南”,”DianneSiebold”,28.0,{2000,9}}};p=book;printf(”%8.2f,”,++p->price);/*橙色表达式等价于++(p->price)*/第8章用户自定义数据类型——指针与结构printf(”%8.2f,”,(++p)->price);/*先计算

7、++p,p指向book[l]*/printf(”%8.2f,”,p++->price);/*上述表达式等价于(p++)->price*/printf(“%8.2f\n”,p->price++);/*上述表达式等价于(p->price)++*/for(p=book;pname,(*p).author,p->pubday.year,p->pu

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。