- 1、本文档共11页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第8章 用户自定义数据类型 ——指针与结构 8.5.1 指向结构体变量的指针变量 在定义一个结构体变量时,系统将在内存中分配一块连续的存储空 间,用于存放结构体成员的数据,这块连续存储空间的首地址称为结 构体变量的指针(也称为结构体变量的首地址)。可以定义指向结构体 变量的指针变量,若把某结构体变量的首地址赋值给一个指针变量, 则称这一指针变量指向该结构体变量。指向结构体的指针变量定义格式是: struct 类型名 * 指针变量名; 第8章 用户自定义数据类型 ——指针与结构 如下面定义一个结构体类型booktp来存储书的基本信息: 第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 的值都是 53.0, 而book5.pubday.year 、p-pubday.year以及(*p).pubday.year 的值都是2000。 注意此处(*p), price的圆括号不能少.指针运算符“*”作用于指针变量p上,构成 表达式(*p),等价于结构体变量名book5。 第8章 用户自定义数据类型 ——指针与结构 8.5.2 指向结构体数组的指针变量 指向结构体的指针变量也可以指向结构体数组及其元素。 例如,下述程序段: struct booktp *p,book[3]; p=book; 如图8.20所示,图中假定book[0]的地址是3000,指针变量p指向结构体数 组book的首地址,由于sizeof(struct booktp)的值为 98,每个结构体元素 占内存空间98个字节,因此p+l指向地址3098处,p+2指向地址3196处。 第8章 用户自定义数据类型 ——指针与结构 使用指针变量指向结构体变量或结构体数组时,应注意运算符的优先级: 1.“( )”、”[ ]”、“-”、“.”四个运算符优先级相同,在C语言中具有 最高的优先级,运算的结合方向是“从左到右”; 2.“*”、“十十”、“一一”、“”四个运算符优先级相同,在C语言优先 级的级别仅次于上述的四个运算符,运算的结合方向是“从右到左”。 [例8.16]通过一个简单的例子说明指向结构体数组的指针的应用。在 程序中,为了说明运算符的优先级和结合方向的用法,改变了书的价格。 第8章 用户自定义数据类型 ——指针与结构 struct booktp { char name[60]; /*书名*/ char author[30]; /*作者*/ float price; /*价格*/ struct datetp pubday; }; struct booktp *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章 用户自定义数据类型 ——指针与结构 第8章 结构体作为函数参数 [例8.15] #includestdio.h struct st { int a; char b; } ; fun(struct st bc) { bc.a+=5; bc.b=’A’; printf(”被调函数中成员的值是: %d ,%c\n”,bc.a,bc.b); } [例8.16] #includest
文档评论(0)