网站大量收购闲置独家精品文档,联系QQ:2885784924

《C语言程序设计项目化教程》课件第3章.ppt

《C语言程序设计项目化教程》课件第3章.ppt

  1. 1、本文档共409页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

源程序如下:

/*程序功能:利用指向函数的指针变量实现函数的嵌套调用*/

#includestdio.h

floatf1(floatn)

{returnn*n;}

floatf2(floatn)

{return2*n;}

voidmain(){?float(*p1)(float),(*p2)(float),(*t)(float),y1,y2;

p1=f1;

p2=f2;

y1=p2(p1(2.0));

t=p1;p1=p2;p2=t;

y2=p2(p1(2.0));

printf(%4.0f%4.0f,y1,y2);

}程序运行结果如下:

816

说明:

(1)由于指针变量所指向的函数带有参数,所以在指针变量定义中,就需要规定其所指函数每一个参数的类型,以满足类型检查的需要(参数名可省略,但参数类型不能省略)。

例如:

float(*p1)(float);定义中,说明了指针变量p1所指函数带有一个参数,且必须为实型参数。

(2)本例中“y1=p2(p1(2.0));”语句行利用指针形式对函数f1()、f2()进行了嵌套调用。其中,先以实型数值2.0作为实参调用了p1所指函数f1();随后利用函数f1()返回的结果为实参,调用指针变量p2所指函数f2(),并将返回值赋予变量y1。

(3)本例中“t=p1;p1=p2;p2=t;”语句行是利用指针地址交换赋值方式,实现对指针变量p1、p2所指函数的互换,交换结果为:指针变量p1指向函数f2();指针变量p2指向函数f1()。3.4.8指向结构体类型数据的指针

可以定义一个指针变量用来存放结构体变量的地址,也就是指向这个结构体变量,结构体变量的指针就是该变量所占内存起始段的地址。这样的指针变量叫做指向结构体类型数据的指针变量,简称指向结构体类型数据的指针。它也可以用来指向结构体数组中的元素。1.指向结构体变量的指针

【例3.43】使用指向结构体变量的指针来访问结构体变量的各个成员。

源程序如下:

#includestdio.h

structstdtp

{

intnum;

charname[10];floatscore;

};

main()

{

structstdtps={1,Wang,89.5},*p=s;/*p是指针变量,其中存放变量s的地址*/

printf(Num:%d\n,p-num);

printf(Name:%s\n,p-name);

printf(Score:%5.1f\n,p-score);

}程序运行结果如下:

Num:1

Name:Wang

Score:89.5

运算符“-”由减号和大于号构成,是一个运算符,称为指向运算符,它的优先级和“.”一样,属于优先级最高的运算符。这个运算符的左侧必须是结构体类型数据的指针。通过指向结构体变量的指针来访问结构体变量的成员,与直接使用结构体变量的效果一样。一般地说,如果指针变量已指向结构体变量,则可以用以下三种格式访问结构体变量的成员:格式一结构体变量.成员

格式二指针变量-成员

格式三(*指针变量).成员

格式三中的括号不能省略,因为“.”的优先级高于“*”。如果省略,则相当于*(指针变量.成员),这种形式是错误的。2.指向结构体数组的指针

【例3.44】使用指向结构体数组的指针来访问结构体数组元素。

源程序如下:

#includestdio.h

structstdtp

{

intnum;

charname[10];floatscore;

};

voidmain()

{

structstdtpstu[3]={{1,Wang,90.0},

{2,Qian,89.5},

{3,Sun,85.0}};

structstdtp*p;

inti;p=stu;/*p中存放数组元素stu[0]的地址,即p指向stu[0]*/

printf(Num\tName\tScore\n);

for(i=0;i3;i++,p++)

{

printf(%d\t,p-num);

printf(%s\t,p-name);

printf(%5.1f\n,p-score);

}

}

您可能关注的文档

文档评论(0)

酱酱 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档