欢迎来到天天文库
浏览记录
ID:1461738
大小:216.00 KB
页数:11页
时间:2017-11-11
《第8章 第二讲 结构体指针、结构体做函数参数》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第8章用户自定义数据类型——指针与结构8.5.1指向结构体变量的指针变量在定义一个结构体变量时,系统将在内存中分配一块连续的存储空间,用于存放结构体成员的数据,这块连续存储空间的首地址称为结构体变量的指针(也称为结构体变量的首地址)。可以定义指向结构体变量的指针变量,若把某结构体变量的首地址赋值给一个指针变量,则称这一指针变量指向该结构体变量。指向结构体的指针变量定义格式是:struct类型名*指针变量名;第8章用户自定义数据类型——指针与结构如下面定义一个结构体类型booktp来存储书的基本信息:structbooktp{charname[60];charauthor[30];floa
2、tprice;structdatetp{unsignedyear;unsignedmonth;}pubday;};可以定义结构体变量和指向结构体变量的指针:structbooktpbook5,*p;第8章用户自定义数据类型——指针与结构以上定义了p为指向结构体变量的指针变量。若p=&book5;,则称指针变量p指向结构体变量book5,此时可用下述三种方式之一存取结构体成员(三种方式是等价的):1.结构体变量名.成员名2.指针变量名->成员名3.(*指针变量名).成员名其中“->”是指向运算符.如有下面程序段:structbooktp*p,book5={“C++Buider网络开发实例”
3、,”清汉计算机工作室”,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,book[3];p=b
4、ook;如图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;/*价格*/structdatetppubda
6、y;};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);/*先计算++p,p指向book[l]*/printf(”
7、%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
此文档下载收益归作者所有