指针1
- 格式:doc
- 大小:131.00 KB
- 文档页数:10
牌坊式深度指示器指针的精度牌坊式深度指示器在当前的矿山的提升机领域里有着广泛的应用。
它也是矿井提升机重要的保护检测装置。
其主要作用有:1、向司机指示提升容器在井筒的实际位置;2、容器接近井口停车位置时发送减速信号;3、当提升容器过卷时,发出过卷信号,并进行安全保护。
一、存在问题:在实际使用中发现深度指示器的深度指针的行程范围偏小;在有的行程达不到整个行程的三分之二;尤其以200米以下的提升高度较明显。
这就大大影响深度指示器的精度;造成停车位置不准确,严重的会发生安全事故。
二、相关计算:这是牌坊式深度指示器附带的齿轮更换选用表,以此为例进行相关验算,加以说明。
2米提升机更换齿轮选用表提升高度(米)Z5 Z6 丝杠螺母K7115 K7116 K71151 齿数齿数螺距236 236 22 60 20mm236~364 236~364 330 18 64 20mm 364 364~490 14 68 20mm490~660 490~600 330~720 12 70 20mm660~950 9 73 20mm720 9 73 16mm牌坊式深度指示传动系统原理图理论计算:从传动的原理图分析可知:深度指示器丝杠的转数与提升机主轴的转数成正比;而主轴转数与提容器在井筒中的位置相对应。
以2米提升机更换齿轮选用表中的齿轮齿数进行验算:确定相关参数:1、根据主轴装置——主轴的轴径以及轴头的尺寸确定大伞齿轮的齿数:Z1=124;Z2=40或Z1=68;Z2=22,模数M=3以此为主轴到丝杠的第一传动比,i=Z1/Z2。
2、根据牌坊式深度指示器的齿轮更换表选取提升高度H=236 米;Z5=22; Z6=60 ; 丝杠螺母螺距t=20mm3、计算:(卷筒直径为2米;Z5、Z6按表选取)(1)提升机提升深度H=236米时主轴转动的圈数:N=H/(D×π)=37.5 (转)主轴到深度指示器丝杠的传动比:i=Z1/Z2×(Z5/Z6)=1.03;深度指示器指针的行程:S=t×n1=t×i×N=851.8 mm(2)提升机提升深度H=364米时主轴转动的圈数:N=H/(D×π)=57.96 (转)主轴到深度指示器丝杠的传动比:i=Z1/Z2×(Z5/Z6)=0.869;深度指示器指针的行程:S=t×n1=t×i×N=1074.9 mm(3)提升机提升深度H=490米时主轴转动的圈数:N=H/(D×π)=78 (转)主轴到深度指示器丝杠的传动比:i=Z1/Z2×(Z5/Z6)=0.63;深度指示器指针的行程:S=t×n1=t×i×N=993 mm(4)提升机提升深度H=660米时主轴转动的圈数:N=H/(D×π)=105 (转)主轴到深度指示器丝杠的传动比:i=Z1/Z2×(Z5/Z6)=0.53;深度指示器指针的行程:S=t×n1=t×i×N=1113.7 mm三、问题分析:通过以上计算,深度指示器的指针行程分别为851.8mm;1074.9mm、993mm和1113.7mm。
汇编语⾔理解指针(指针就是汇编的间接寻址,其实就是⼀个简单⽅便的运算指令,计算完毕直接就赋。
有空⾃⼰也写⼀个学习笔记,先把参考⽂章记下了:我的理解:指针就是使⽤mov⽅法的间接寻址。
想要明⽩指针,必须懂得LEA和MOV指令的区别。
然后就觉得已经豁然开朗。
mov 和 lea 的区别mov ecx,[eax+0x30]表⽰先运算eax+0x30得到⼀个结果,以这个结果为地址找⼀个ecx长度的内存数赋给ecxlea ecx,[eax+0x30]表⽰先运算eax+0x30得到⼀个结果,把这个结果(mov时地址)赋给ecx效果为ecx=eax+0x30 (这⾥eax参与了运算却没有改变值)dword 双字就是四个字节ptr pointer缩写即指针[]⾥的数据是⼀个地址值,这个地址指向⼀个双字型数据⽐如mov eax, dword ptr [12345678] 把内存地址12345678中的双字型(32位)数据赋给eax----------------------------------------------------MOV与LEA的区别可以说,mov 这个汇编指令在汇编语⾔程序中是⾮常⾮常常见的⼀个指令. 打个最简单的⽐⽅,就好⽐我们⼈要每天说话⼀样..在汇编语⾔中,Mov 指令就好⽐我们⼈要每天说话⼀样。
每⼀个程序都离不开 Mov指令。
Mov指令:传送指令,可以⽤于传送寄存器,也可以⽤于传送内存地址.lea指令:传送指令。
如果是刚刚学习汇编语⾔的朋友,看到上⾯的解释⼀定会很疑惑,Mov 和 Lea都是传送指令,那么它们直接的区别在哪⾥?下⾯详细解释 Mov 与Lea 汇编指令的区别.先作举⼀个⽣活中的例⼦, ⽐如你要坐车去电影院,你可以告诉司机电影院的地址,然后司机根据地址将你送到电影院. 你还可以,告诉司机电影院的名字,司机通过名字将你送到电影院. 我们⽤这两种⽅式都可以顺利的到达⾃⼰想到底的电影院.Mov 和lea 的作⽤就是像上⾯例⼦说的⼀样.⽤不同的⽅式(传送⽅式),达到同⼀个⽬的(传送数据).换句话说,Mov 指令传送⽅式,是将存放内存数据的地址进⾏传送. ⽽Lea则是恰恰相反,Lea是直接将内存数据进⾏传递.下⾯⽤⼀个例⼦说明 lea与mov 的区别:mov ecx,30add ecx,eax----------------------------------------------------lea ecx,[eax+30]----------------------------------------------------mov ecx,[eax+30]表⽰先运算eax+30得到⼀个结果,以这个结果为地址传递到⼀个ecx长度的内存地址存放ecxlea ecx,[eax+30]表⽰先运算eax+30得到⼀个结果,把这个结果传递到ecx中。
冀教版五年级数学下册第一单元图形的运动(二)一、填空。
(每空1分,共26分)1.寓意深远的汉字中蕴含着数学美,在“昌、日、比、台、正”这些汉字中,是轴对称图形的有()。
2.体育课上,老师口令是“立正,向左转”时,应按()时针方向旋转90°,口令是“立正,向后转”时,应按()时针方向旋转180°。
3.看图填一填。
(1)指针指向1,指针绕点O顺时针旋转30°后指向()。
(2)指针指向1,指针绕点O顺时针旋转()°后指向3。
(3)指针指向1,指针绕点O顺时针旋转90°后指向()。
(4)指针指向1,指针绕点O逆时针旋转()°后指向7。
4.如图,上面的图形怎样运动得到下面的图形?是平移的画“○”,是旋转的画“△”。
()()()()5.(1)图形△向上平移可以到达图形()的位置。
(2)图形△与图形()可构成一个轴对称图形。
(3)图形△绕点A顺时针旋转90°到达图形()的位置。
(4)图形△绕点()()时针旋转180°到达图形△的位置。
6.(1)图形A绕点O()时针旋转90°()次到达图形C的位置,图形D绕点O()时针旋转90°到达图形C的位置。
(2)图形D绕点O()时针旋转90°后,再向()平移()格得到图形E。
(3)以直线PQ为对称轴,直线左侧的图形B需要先向()平移()格,再向()平移()格,才能和图形E对称。
二、选择。
(将正确答案的序号填在括号里)(每小题2分,共14分)1.下面图形中只有一条对称轴的图形是()。
A. B. C. D.2.将绕点O按顺时针方向旋转90°,得到的图形是()。
A. B. C. D.3.把镜子分别放到下列每个选项右侧,从镜子中看到的是的是()。
A. B. C. D.4.下面左侧图形通过平移能得到()。
A. B. C. D.5.剪纸是我国传统的民间艺术。
如图△△,将一张纸片进行两次对折后,再沿图△中的虚线裁剪,最后将图△中的纸片打开铺平,所得图案应该是()。
理解C语⾔(⼀)数组、函数与指针1 指针⼀般地,计算机内存的每个位置都由⼀个地址标识,在C语⾔中我们⽤指针表⽰内存地址。
指针变量的值实际上就是内存地址,⽽指针变量所指向的内容则是该内存地址存储的内容,这是通过解引⽤指针获得。
声明⼀个指针变量并不会⾃动分配任何内存。
在对指针进⾏间接访问前,指针必须初始化: 要么指向它现有的内存,要么给它分配动态内存。
对未初始化的指针变量执⾏解引⽤操作是⾮法的,⽽且这种错误常常难以检测,其结果往往是⼀个不相关的值被修改,并且这种错误很难调试,因⽽我们需要明确强调: 未初始化的指针是⽆效的,直到该指针赋值后,才可使⽤它。
int *a;*a=12; //只是声明了变量a,但从未对它初始化,因⽽我们没办法预测值12将存储在什么地⽅int *d=0; //这是可以的,0可以视作为零值int b=12;int *c=&b;另外C标准定义了NULL指针,它作为⼀个特殊的指针常量,表⽰不指向任何位置,因⽽对⼀个NULL指针进⾏解引⽤操作同样也是⾮法的。
因⽽在对指针进⾏解引⽤操作的所有情形前,如常规赋值、指针作为函数的参数,⾸先必须检查指针的合法性- ⾮NULL指针。
解引⽤NULL指针操作的后果因编译器⽽异,两个常见的后果分别是返回置0的值及终⽌程序。
总结下来,不论你的机器对解引⽤NULL指针这种⾏为作何反应,对所有的指针变量进⾏显式的初始化是种好做法。
如果知道指针被初始化为什么地址,就该把它初始化为该地址,否则初始化为NULL在所有指针解引⽤操作前都要对其进⾏合法性检查,判断是否为NULL指针,这是⼀种良好安全的编程风格1.1 指针运算基础在指针值上可以进⾏有限的算术运算和关系运算。
合法的运算具体包括以下⼏种: 指针与整数的加减(包括指针的⾃增和⾃减)、同类型指针间的⽐较、同类型的指针相减。
例如⼀个指针加上或减去⼀个整型值,⽐较两指针是否相等或不相等,但是这两种运算只有作⽤于同⼀个数组中才可以预测。
FCU1+2故障一、参考文献:1、FCOM PRO-ABN-22;PRO-SUP-242、QRH ABN-80.18A (计算机重置)二、程序标准:无三、程序摘抄:PFD气压基准:仅有“标准”如果两个FCU(飞行控制组件)通道都故障时,在PFD上的气压基准值自动变为1013 hPa。
使用备用高度表来设置实际的气压值。
不要在MCDU PERF APPR(性能进近)页面上输入MDA(MDH)值(因为PFD高度是参考STD(标准)而不是修正的气压值)。
PNF必须用备用高度表执行标准口令(“决断高度加一百”和“决断高度”)。
另外: 所有FCU控制器不工作A/THR,AP1+2和FD1+2不可用。
(在LAND和GO AROUND方式中,只有A/THR失效)。
.在PFD上:• 高度警戒失效。
• ILS偏离刻度显示• 显示飞行航迹矢量。
• 马赫指示不工作。
• FMA失效,除了在LAND和GA方式中。
在ND上:• 带地图(80NM范围)的罗盘导航方式显示• VOR/ADF指针: 指针1只能指示VOR1。
指针2只与ADF2相关(若未安装ADF2,则为ADF1)。
(DDRMI(数字式距离和无线电磁指示器)上的VOR选择不受影响) (DDRMI上的ADF选择(若有)不受影响)。
• 气象雷达图象可能会丢失。
若仍然显示,则必须忽略。
在所有情况下,都显示 红色的“WXR RNG”(天气范围)信息----------------------------------------------------------------------------------------------------------------------------------------------------------------状态:PFD BARO REF :仅有“标准” ;如果在LAND或GA方式中: 仅2类不工作系统 :FCU 1 + 2 ;AP 1 + 2 ;A/THR; CAT 3;GPWS TERR ;CAT 2 (如果不在LAND 或 GA方式) ;四、补充讲解:AP1+2 失去 A/TH失去 FD1+2不工作PF PNF口令“我操纵,我通讯执行ECAM”取消master caution,master warning口令“你操纵,你通讯”执行ECAM动作”作到“STS”页,检查有无“检查单 OEB和计算机重置”执行完ECAM后,报告ECAM完成由于PFD气压基准只有STD,机组需要在高度上做修正,尤其是在修正气压与标准气压差异较大时。
实验一燃煤的工业分析一、实验目的煤矿的工业分析又叫煤矿的实用分析。
它通过规定的实验条件测定煤中水分、灰分、挥发分和固定碳等质量含量的百分数,并观察评判焦炭的粘结性特征。
煤的工业分析是锅炉设计、灰渣系统设计和锅炉燃烧调整的重要依据。
通过煤的工业分析实验,可进一步巩固煤的工业分析成分概念,学会煤的工业分析方法与有关仪器、设备的使用知识。
煤的工业分析采用分析试样,其成分质量百分数在上角用分析基f表示。
二、煤工业分析的基本原理煤中的水可分为游离水和化合水。
游离水以附着、吸附等物理现象同煤结合;化合水以化学方式与煤中某些矿物质结合,又称结晶水(如硫酸钙结晶水CaSO4·H2O、高岭土结晶水Al2O3·2SiO2·H2O 等)。
煤中游离水称为全水分。
其中一部分附着在煤表面上,称外部水分,其余部分吸附或凝聚在煤颗粒内部的毛细孔中,称内部水分。
煤中的全水分在稍高于100℃以下,经过足够的时间,可全部从煤中脱出。
煤的工业分析测定的是煤的全水分。
根据煤样的不同,又分原煤样的全水分(应用基水分W y)和分析煤样水分W y。
在实验室条件下,去除煤外部水分后的试样称为煤分析试样。
制取分析试样的方法是先将3mm以下的0.5kg原煤倒入方形浅盘中,使煤层厚度不超过4mm。
然后,把煤盘放在70~80℃烘箱中干燥1.5h。
取出煤盘,将煤粉碎到0.2mm以下,在实验室的温度下冷却并自然干燥24h。
煤的灰分是指煤完全燃烧后留下的残渣。
它与煤中存在的矿物质不完全相同,这是因为在燃烧过程中矿物质在一定的温度下发生一系列的氧化、分解和化合等复杂反应。
煤的挥发分是煤在隔绝空气条件下受热分解的产物。
它的产生量、成分结构等与煤的加热升温速度、温度水平等有关。
挥发分不是煤中的现存成分。
由上述可知,煤工业分析必须规定明确的实验条件,测定的水分、灰分、挥发分等含量是在一定实验条件下得到的,是一种相对的鉴别煤工业特性的成分数据。
python-seek-将⽂件指针指向⼀开始 1'''2概述 : seek() ⽅法⽤于移动⽂件读取指针到指定位置。
3语法 : seek() ⽅法语法如下:4 fileObject.seek(offset[, whence])56参数7 offset -- 开始的偏移量,也就是代表需要移动偏移的字节数8 whence:可选,默认值为 0。
给offset参数⼀个定义,表⽰要从哪个位置开始偏移;9 0代表从⽂件开头开始算起,1代表从当前位置开始算起,2代表从⽂件末尾算起。
1011返回值 : 如果操作成功,则返回新的⽂件位置,如果操作失败,则函数返回 -1。
1213实例14以下实例演⽰了 readline() ⽅法的使⽤:15⽂件 example.txt 的内容如下:161:172:183:194:205:21'''22# 打开⽂件23 file = open("./data/example.txt", "r")24print("⽂件名为: ", ) # ⽂件名为: example.txt2526 line = file.readline()27print("读取的数据为: %s" % (line))2829# 重新设置⽂件读取指针到开头30 file.seek(0, 0) # 将⽂件指针放到指定位置31 line = file.readline()32print("读取的数据为: %s" % (line))3334# 关闭⽂件35 file.close()36''' 运⾏结果:37⽂件名为: ./data/example.txt38读取的数据为: 1:3940读取的数据为: 1:4142'''。
指针一、指针概述1. 地址C++程序中每一个实体,如变量、数组和函数等,都要在内存中占有一个可标识的存储区域。
每一个存储区域由若干个字节组成,在内存中,每一个字节都有一个“地址”,一个存储区的“地址”指的是该存储区中第一个字节的地址。
2.指针指针就是存储区域的地址。
一个地址指向一个程序实体的存储空间。
直接访问:通过变量名或地址访问程序中一个实体的存储空间的方式(其实通过变量名访问也就是通过地址访问)。
间接访问:把一个变量的地址放在另一个变量中。
3.指针变量专门用来存放地址的变量就叫指针变量,需要专门加以定义。
二、指针的类型与指针的定义指针也是具有类型的。
指针的类型就是它所指向的变量的类型。
例如,一个指向int型的指针,一个指向一维数组的指针。
在使用一个指针变量之前,先要用声明语句对其进行定义。
例如:int *p;定义了一个指向整型数据的指针变量p。
即p是一个存放整型变量地址的变量。
应当特别注意的是,定义一个指针变量必须用符号“*”,它表示其后的变量为指针变量,指针变量为p,而不是*p。
要想使一个指针变量指向一个变量,必须将变量的地址赋给指针变量。
例如:int *p, i=3;p=&i;指针变量也可以定义为指向实型、字符型以及其它类型的变量。
如:float *p ;char *q ;三、指针运算符在C++语言中,有两个有关指针的运算符:&:为取地址运算符,&x的值为x的地址。
* :指针运算符,或称指向运算符,也称间接运算符,*p代表p 所指向的变量。
如:int a=15, *p;p=&a;cout<<a<<endl; 输出a的值15。
cout<<*p <<endl; 将指针变量p所指向的变量的值(15)输出。
*p=10; 将10赋给p所指向的变量。
Cout <<a<<endl; 输出a的值10。
注意:此处的*p与定义指针变量时用的*p含义是不同的。
在定义时,“int *p”中的“*”不是运算符,它只是表示其后面的变量是一个指针类型的变量。
而在程序中的执行语句中引用的“*p”,其中的“*”是一个指针运算符,*p表示“p指向的变量”。
因此,int i , *p ;p=&i ;则:*p和i 相同。
例: 交换两个指针变量所指向的变量的值。
Void main(){ int *p1 , *p2 , i , i1=10 , i2=20;p1=&i1,p2=&i2;i=*p1;*p1=*p2;*p2=i;cout<<i1<<””<<i2<<endl;}运行结果为:20 10四、指针与数组1.一维数组的指针表示方法一维数组名代表数组的起始地址。
假设一个数组int a[5],其起始地址为1010,则:a的值就为1010,a[0]的地址也为1010,a[1]的地址为1014,也可以用a+1表示,也就是说,“a+1指向数组a中下标为1的元素”。
同样,a+i是a[i]的地址。
需要说明的是:在编译系统计算实际地址时,a+i中的i要乘上数组元素所占的字节数,即:a+i×(一个元素所占的字节数)。
例如:a+1的实际地址为:1010+1×4=1014 ;a+3的实际地址为:1010+3×4=1022 ;余类推。
或者说,a+i和&a[i]是相等的,都是a[i]的地址。
请注意区分a[i]与&a[i]二者的不同含义。
为了引用数组中的一个元素,可以用下面三种不同的方法:(一)下标法:如a[3](二)地址法:通过地址a+3可以找到a[3]元素,*(a+3)就是a[3]。
因此下面二者等价:a[i]——下标法*(a+i) ——地址法都是指a数组中序号为i的元素值。
(三)定义一个指针变量,指向一数组元素。
例如:定义一个指针变量p,使它的值等于某一元素的地址,这样*p就是该元素的值。
int *p , i=10;p=&i ;例:分别用下标法、地址法和指针法访问数组元素。
Void main(){int a[5]={1,3,5,7,9}, *p , i ;for(i=0 ; i<5 ; i++)cout<<a[i]<<””; /* 用下标法a[i]输出*/cout<<endl;for(i=0 ; i<5 ; i++)cout<<*(a+i)<<””; /* 用地址法*(a+i)输出*/cout<<endl;for(p=a;p<a+5;p++)cout<<*p<<””; /* 用指针变量*p输出*/cout<<endl;}运行结果为:1 3 5 7 91 3 5 7 91 3 5 7 9现在着重分析第三种方法:用指针变量p指向数组元素的方法。
p的初值等于a,此时p指向a数组中第一个元素a[0],*p就是a[0]。
在输出*p的值后,p++使p指向下一个元素a[1],*p就是a[1],在输出*p的值后,p++又使p指向下一个元素,……,直到p=a+5为止。
由于p是变量,p的值不断在变化,而p的值是地址,因此p不断改变其指向。
五、指针与字符串字符串存放在字符数组中。
因此,对字符串操作可以定义一个字符数组,也可以定义一个字符指针。
例:用字符指针指向一个字符串。
Void main(){char string[ ]=“ C Language”;char *p;p=string;cout<<string<<endl;cout<<p<<endl;}运行结果:C LanguageC Language也可以不定义字符数组,而直接用一个指针变量指向一个字符串常量。
如:void main(){char *p=”C Language”;cout<<p<<endl;}程序中虽然没有定义数组,但字符串在内存中是以数组形式存放的。
它有一个起始地址,占一片连续的存储单元,并以“\0”结束。
char *p=”C Language”;的作用是:使指针变量P指向字符串的起始地址。
六、指针数组一个数组,如果每个元素的类型都是整型的,那么这个数组称为整型数组;如果每个元素都是同类型的指针类型,则它是指针数组。
也就是说,指针数组是用来存放一批地址的。
前已述及,在初始化字符数组时,可以用指针变量来代替字符数组。
例如:char *string=“I am a student”;如果有五个字符串,可以用五个指针变量来指向它,这就是指针数组。
例如:char *name[5]={“LiFang”, “ZhangLi”, “LingMaoTi”, “SunFei”,“Wangfang”}name是一维数组,它有五个元素,每个元素都是指向字符数据的指针型数据。
其中,name[0]指向第一个字符串“LiFang”。
七、指针与函数指针与函数的关系,主要表现在如下三个方面:1.用指针作为函数参数2.函数的返回值是指针3.指向函数的指针1.指针作为函数参数例:有一数组,有10个元素,要求输出其中最大和最小的元素。
#define N 10void main(){void max_min(int arr[ ],int *pt1,int *pt2,int n);int array[N]={1,8,10,2,-5,0,7,15,4,-5};int *p1,*p2,a,b;p1=&a;p2=&b;max_min(array , p1 , p2 , N);printf(“max=%d,min=%d\n”,a,b);}void max_min(int arr[ ],int *pt1,int *pt2,int n){int i;*pt1=*pt2=arr[0];for(i=0;i<N;i++){if(arr[i]>*pt1) *pt1=arr[i];if(arr[i]<*pt2) *pt2=arr[i];}}2.指向函数的指针一个函数包括一系列的指令,在内存中占据一片存储单元,它有一个起始地址,即函数的入口地址,通过这个地址,可以找到该函数,这个地址就称为函数的指针。
我们可以定义一个指针变量,使它的值等于函数的入口地址,那么通过这个指针变量,也能调用该函数,这个指针变量称为指向函数的指针变量。
定义一个指向函数的指针变量的一般形式:类型标识符(*指针变量名)( );例如int (*p)( );它表示p指向一个返回值为整型的函数。
注意,*p两边的括弧不能省略。
如果写成int *p( );就称了返回指针值的函数。
在定义了指向函数的指针变量后,可以将一个函数的入口地址赋给它,这就实现了使指针变量指向一个指定的函数。
如:p=fun1;可以用下列形式调用函数:(*指针变量)(实参列表);例如: (*p)(a,b);其相当于fun1(a,b);也可以写成p(a,b);例6.26 写一个程序,给出一个一维数组的元素值,先后四次调用一个函数,分别求①数组中元素之和②最大值③下标为奇数的元素之和④求各元素的平均值。
#define N 12main(){static float a[12]={1.5,3.8,5.6,7.8,91.6,1.61,13.3,15.0,17.5,19.9,21.7,23.0};float arr_add( ),odd_add( ),arr_ave( ),arr_max( );void process(float *p,int n,float (*fun)( ));int n=N;printf("the sum of %d elements is:",n);process(a,n,arr_add);printf("the sum of odd elements is:");process(a,n,odd_add);printf("the average of %d elements is:",n);process(a,n,arr_ave);printf("the maximum of %d elements is:",n);process(a,n,arr_max);}void process(float *p,int n,float (*fun)( )){float result;result=(*fun)(p,n);printf("%8.2f\n",result);}float arr_add(float arr[],int n) {int i;float sum=0;for(i=0;i<n;i++)sum=sum+arr[i];return(sum);}float odd_add(float *p,int n) {int i;float sum=0;for(i=0;i<n;i=i+2,p=p+2)sum=sum+*p;return(sum);}float arr_ave(float *p,int n) {int i;float sum=0,ave;for(i=0;i<n;i++)sum=sum+p[i];ave=sum/n;return(ave);}float arr_max(float arr[],int n) {int i;float max;max=arr[0];for(i=1;i<n;i++)if (arr[i]>max) max=arr[i];return(max);}4.返回指针的函数一个函数在调用之后可以带回一个值返回到主调函数,这个值可以是整型、实型、字符型等,也可以是一个指针类型。