- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
9.3 结构体指针 注意: 为了使用方便和直观,C语言允许把(*p).x改用p-x 来代替,它表示p所所指向的结构体变量中的x成员。 “-”称为指向运算符。 如果p指向一个结构体变量,以下3种形式等价: (1)结构体变量.成员名 (2)(*p).成员名 (3)p-成员名 指向结构体变量的指针变量,也可以用来指向结构 体数组元素。 8.3.1 数组元素的指针 【例9-5】有3个点坐标,放在结构体数组中,要求输出全部坐标信息。 解题思路: (1)声明结构体类型struct coordinate,并定义结构体数组,同 时使之初始化; (2)定义一个指向struct coordinate类型数据的指针变量; (3)使p指向结构体数组的首元素,输出它指向的元素中的有关 信息; (4)利用循环使p指向结构体数组的下几个元素并输出它们的信 息。 #includestdio.h struct coordinate { char pointname[20]; double x; double y; double H; }; struct coordinate pt[3]={{氮肥厂,2503396.5128,709934.8769,532.743}, {扶绥中学,2505530.1986,710280.0416,543.112}, {渠黎中学,2503369.2088,712593.9624,512.223}}; void main() { struct coordinate *p; printf( 点名 x坐标 y坐标 H\n); for(p=pt;ppt+3;p++) printf(%-10s%-15.4f%-15.4f%-10.3f\n,p-pointname,p-x,p-y,p-H); } pt[1] pt[2] 512.223 712593.9624 2503369.2088 渠黎中学 543.112 710280.0416 2505530.1986 扶绥中学 532.743 709934.8769 2503396.5128 氮肥厂 pt[0] p p′ p″ p是指向struct coordinate结 构体类型数据的指针变量。 在for语句中先使p的初值为 pt,也就是数组pt第一个元 素的起始地址,图中 p的指 向。在第一个循环中输出 pt[0]的各个成员值,然后p++, 使p自加1。P加1意味着 p所 增加的值为结构体数组pt的 一个元素所占的字节数(在 VC++)环境下 ,本例一个 元素所占的字节数为 20+8+8+8=44字节)。执行 p++后,p的值等于pt+1,p 指向pt[1],见图p′的指向。 9.3 结构体指针 注意: (1)如果p的初值为pt,即指向pt的第一个元素,p加1后,p 就指向下一个元素。例如: (++p)-H 先使p自然加1,然后得到p指向的元素中x成员值 (即543.112) (p++)-H 先求得p-H的值(即532.743),然后再使p自加 1,指向pt[1] (2)程序已定义了p是一个指向struct coordinate类型数据的 指针变量,它用来指向一个struct coordinate类型的数据,不 应用来指向pt数组中的某一成员。 如果要将某一成员的地址赋给p,可以用强制类型转换,先将 成员的地址转换成p的类型。例如 p=(struct coordinate*)pt[0].pointname; 9.3 结构体指针 9.4 用结构体变量和结构体变量的指针作函数参数 将一个结构体变量的值传递给另一个函数,有3种方法: (1)用结构体变量的成员作参数。 其用法和普通变量作参数 一样,属于“值传递”方式。应当注意实参与形参的类型保持 一致。 (2)用结构体变量作实参。 用结构体变量作实参时,采用的 也是“值传递”的方式,将结构体变量所占的内存单元的内容 全部顺序传递给形参,形参也必须是同类型的结构体变量。在 函数调用期间形参也要占用内存单元。这种传递方式在空间和 时间上开销较大,如果结构体规模很大时,开销是很可观的。 此外由于采用值传递方式,如果在执行被调用函数期间改变了 形参(也是结构体变量)的值,该值不能返回主调函数,这往 往会造成使用上的不便。因此较少使用。 9.4 用结构体变量和结构体变量的指针作函数参数 (3)用指向结构体变量(或数组)的指针作实参, 将结构体变量(或数组)的地址传递给形参。 8.3.2 通过指针引用数组元素 【例9
原创力文档


文档评论(0)