- 1、本文档共46页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第11章_指针(二)
第11章 指针(二) 请分析以下几种运算: p-n p-n++ ++p-n 得到p指向的结构体变量中的成员n的值。 得到p指向的结构体变量中的成员n的值,用完该值后使它加1。 p指向的结构体变量中的成员n的值使之加1(先加) 11.4.2 指向结构体数组的指针 #include stdio.h struct student { int num; char name[20]; char sex; int age; }; struct student stu[3]={{10101, “Li Lin”, ’M’,18}, {10102, “Zhang Fun”,’M’,19}, {10104, “Wang Min”,’F’,20}}; 例11.6 指向结构体数组的指针的应用 。 void main( ) { struct student *p; printf(“ No. Name sex age\n”); for (p=stu;pstu+3;p++) printf(“%5d %-20s %2c %4d\n”,p-num,p-name,p-sex,p-age); return; } 输出结果: (1) 如果p的初值为stu,即指向第一个元素,则p+1后指向下一个元素的起始地址。 例如: (++p)-num 先使p自加1,然后得到它指向的元素中的num成员值(即10102)。 (p++)-num 先得到p-num的值(即10101),然后使p自加1,指向stu[1]。 注意以下两点: (2) 指针p已定义为指向struct student类型的数据,它只能指向一个结构体型数据,而不能指向一元素中的某一成员。 例如,下面是不对的: p=stu[2].num 千万不要认为,反正p是存放地址的,可以将任何地址赋给它。如果地址类型不相同,可以用强制类型转换。 例如: p=(struct student *) stu.num; 11.4.3 用指向结构体的指针作函数参数 #include stdio.h #define format “%d\n%s\n%f\n%f\n%f\n” struct student { int num; char name[20]; float score[3]; }; 例11.7 有一个结构体变量stu,内含学生学号、姓名和三门课的成绩。要求在main函数中赋以值,在另一函数printf中将它们打印输出。 void print(struct student *p) { printf (format, p-num, p-name, p-score[0], p-score[1], p-score[2]); printf(“\n”); } void main( ) { struct student stu; stu.num=12345; strcpy(stu.name, “Li Li”); stu.score[0]=67.5; stu.score[1]=89; stu.score[2]=78.6; print(stu); return; } 输出结果: 注意: ANSI C允许用整个结构体作为函数的参数传递,但是必须保证实参与形参的类型相同。 把一个完整的结构体变量作为参数传递,虽然合法,但要将全部成员值一个一个传递,费时间又费空间,开销大。如果结构体类型中的成员很多,或有一些成员是数组,则程序运行效率会大大降低。在这种情况下,用指针作函数参数比较好,能提高运行效率。 #include stdio.h void main( ) { struct student { int num; char name[20]; float score; }; struct student stu[4]; struct student *p; int i,temp=0; float max; 例11.8 有4个学生,每个学生包括学号、姓名、成绩。要求找出成绩最高者的姓名和成绩。 for (i=0;i4;i++) { printf(”请输入第%d个学生的学号,姓名,成绩:\n”,i+1); scanf (“%d %s %f”,stu[i].num,stu[i].name,stu[i].score); } for (max=stu[0].score, i=1;i4;i++) if (stu[i].scoremax) { max=stu[i].score; temp=i; } p=s
您可能关注的文档
最近下载
- API Spec7-1 - 2006旋转钻柱构件规范 【中文版】.pdf
- 2025年医师定期考核人文医学题库与答案.pdf VIP
- 蒸汽管道报检资料全.doc
- AQ 1064-2008 煤矿用防爆柴油机无轨胶轮车安全使用规范.pdf VIP
- 康复科绩效工资考核分配方案.pptx
- 【云合数据-2025研报】2024年长剧集网播年度观察.pdf
- 铷铯及其化合物,中国前8强生产商排名及市场份额调研数据.docx
- 面瘫(面神经麻痹)中医临床路径.pdf
- 面瘫(周围性面神经炎)-中医诊疗指南-等级评审.pdf
- 众泰-T600-产品使用说明书-T600 2.0T 豪华型DCT-JNJ6460QT-T600车系使用手册20131201.pdf
文档评论(0)