c语言中函数形参引用函数;图片上画圈的地方加上形参类型double救报错,报错如图,谁能解释一下!感谢

爱无处不在李易峰知道是为他唱的吗?_百度知道
爱无处不在李易峰知道是为他唱的吗?
我有更好的答案
这首歌是李易峰的粉丝 (外号蜜蜂,草粉)专门为李易峰量身做的一首应援歌曲··粉丝很有才气啊
不是李易峰唱的,只是蜜蜂觉得这首歌的歌词很适合开形容蜜蜂的心身,所以就把他称做蜜蜂团歌
为您推荐:
其他类似问题
爱无处不在的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。c语言-C语言在调用的时候,函数体重新声明形参有什么好处
作者:用户
浏览:510 次
C语言在调用的时候,函数体重新声明形参有什么好处即intadd(intparam1intparam2){returnres=param1+param2;}和intadd(intparam1intpar
C语言在调用的时候,函数体重新声明形参有什么好处
即int add(int param1int param2){
return res = param1+param2;}和int add(int param1int param2){
int a = param1;
int b = param2;
return res = a +}在代码效率上有什么区别么?
在函数体重新声明形参的好处是可以避免对传入参数的修改(如传入引用)。当形参类型为基本类型时,两种方式对结果无影响,但是重新声明可读性更高。如对形参进行++操作时,人们有可能认为直接改变了外面的实参(其实此时改变不了实参)。此时若重新声明形参,则避免了人们的这种误解。
解决方案二:
就你的代码l来说,没有好处。偶尔我们需要保留一个形参的副本,避免修改对它产生影响,倒不是说需要改变实参,而是原始的值自己函数内还要用到,那么就再定义一个变量,这也是有的。
解决方案三:
另外,一般的C++编译器,经过优化,你的两段代码应该产生相同的输出。
解决方案四:
两个代码少一次对象拷贝但是编译器会有一些返回值优化等
解决方案五:
避免修改形参原始值咯。别的没看到啥好处
解决方案六:
函数体重新声明行参的好处是可以不用修改行参,比如行参传的是const*p。不可修改的行参就必须对行参从新声明
【云栖快讯】新手小白必看!编程语言系列讲座火爆进行中,与行业资深专家一起学习Python、C++、JavaScript、Java!从入门到进阶&&
弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率
40+云计算产品,6个月免费体验
稳定可靠、可弹性伸缩的在线数据库服务,全球最受欢迎的开源数据库之一
云服务器9.9元/月,大学必备当前位置:
正文微信扫一扫分享到朋友圈
全国计算机二级等级考试C语言第五章函数真题解析
清华万博培训
第五章 &函数本课重要知识点:1、知识点:函数的概述l&C源程序是由函数组成的,函数由函数首部与函数体组成,函数体包括声明部分和执行语句部分组成。l&C语言程序可以由多个源程序组成,其中一个源程序文件包含main函数,其他函数可以写在另外的源程序文件中,为单独文件,并且可以单独编译。&&&&&& 例1:(10-03-11)以下叙述正确的是(& B )&&&&&& A)C语言程序是由过程和函数组成的&&&&&& B)C语言函数可以嵌套调用,例如:fun(fun(x))&&&&&& C)C语言函数不可以单独编译&&&&&& D)C语言中除了main函数,其他函数不可以作为单独文件形式存在【解析】选项A错误,C语言中没有过程的概念;选项B正确,C语言可以嵌套调用(此知识点在后面介绍);选项C错误,C语言中可以对包含一个或多个函数的源程序单独编译;选项D错误,C语言函数可以单独存在。l&C程序的执行总是从main函数开始,完成对其它函数的调用后再返回到main函数,最后由main函数结束整个程序。main 函数可以调用其它函数,而不允许被其它函数调用。一个C源程序必须有,也只能有一个主函数main。&&&&&& 例1:下列叙述中正确的是(& C& )&&&&&& A)C语言程序将从源程序中第一个函数开始执行&&&&&& B)可以在程序中由用户指定任意一个函数作为主函数,程序将从此开始执行&&&&&& C)C语言规定必须用main作为主函数名,程序将从此开始执行,在此结束&&&&&& D)main可作为用户标识符,用以命名任意一个函数作为主函数。l&在一个函数的函数体内,不能再定义另一个函数,即不能嵌套定义。例1、下列叙述中正确的是(& D& )&&&&&& A)每个C程序文件中都必须要有一个main()函数&&&&&& B)在C程序中main ()函数的位置是固定的&&&&&& C)C程序中所有函数之间都可以是固定的&&&&&& D)在C程序的函数中不能定义另一个函数【解析】一个C源程序可以由多个C程序文件,但只能有一个main()函数,并不是每个C程序文件都必须要有一个main(),main()函数可以放在任意位置,且不允许被其他函数调用,因此正确答案是D。2、知识点:函数的定义例1:以下正确的函数定义形式是:(C)A)double& fun(int x,int y);{}&&&&&& &&&&&& &&&&&& B) double&fun(int x&;int y){}C) double& fun(int x,int y){}& && &&&&&& D)&double& fun(int x, y);{}【解析】在函数中对形参的说明,要求对每个形参都必须说明类型,各参数之间用“,间i;le& fun(intx,int y); D)”隔开,函数定义后应无“;”。l& 函数返回return语句的一般形式:return 表达式;或return& (表达式);在函数中允许有多个return语句,但每次只能有一个return语句被执行。例1:(10-03-24)以下关于return语句叙述中正确的是( B)&&&&&& A)一个自定义函数中必须有一条return语句&&&&&& B)一个自定义函数中可以根据不同情况设置多条return语句&&&&&& C)定义void类型的函数中可以有带返回值的return语句D)没有return语句的自定义函数在执行结束时不能返回到调用处。【解析】自定义函数中可以没有return语句(如不需要返回值的函数,常见void类型)),可以有多条return语句(如在分支结构中,可以从不同分支中返回到调用程序,常见if..else);定义成void类型的函数,不允许从该函数取得返回值,也不允许使用return语句。没有return语句的函数在执行到函数的最后一条语句后自动返回达到调用处。?& 函数值的类型与函数定义中函数的类型保持一致,如不一致,以函数类型为准。例2:(06-04-23)已定义以下函数&intfun(int *p){return *p;}&&&&&& &fun函数返回值是( B )&A)不确定的值&&&& & B)一个整数&C)形参P中存放的值&&&&&& D)形参P的地址值&& 【解析】函数返回性类型取决于定义函数时函数名称前的类型,fun前是int,表明函数fun执行完毕后返回一个整型数。正确答案:B?& return 后的表达式可以是常量、变量、表达式,也可以空。如:&& return 0;&&&&&return (a+b);3、知识点:形参和实参及函数调用l& 形参出现在函数定义中(即定义函数时函数名后面括号中的参数),实参出现在主调函数中(调用函数时函数名后面括号中的参数)l& 形参在本函数体内都可以使用,离开该函数则不能使用。实参在主调函数中内有效,进入被调函数后,实参变量也不能使用。(注:在进行函数调用时,函数必须有确定的值)l& 实参向形参单向传递数值,不能将形参的值反向的传送给实参。实参和形参在数据上、类型上、顺序上要一致。在函数调用过程中,形参的变化不会改变实参的变化。&&&&&& 例1、(09-09-24)有以下程序#include &stdio.h&&&&&&& void fun(int p)&&&&&& {&&&& int d=2;&& &&&&&& p=d++; printf(“%d”,p);& }&&&&&& main()&&&&&& {&&&& int a=1;&&&&&& &&&&&& fun(a); printf(“%d\”,a);&&&&&& }&&&& 程序运行后的输出结果是( C)&&&&&& A)&& 32&&& &&&&&& B)12&&&&&& &&&&&& C)21&&&&&& &&&&&& D)22【解析】此题考点为函数参数的传递。C语言中函数参数的传递是值传递,是把实参的值传给形参,是单向传递,形参的改变不会影响到实参的值。程序中,把实参a的值传给形参p,p=1,然后p=d++,再次赋值后p=2,输出p的值2。返回到主程序中,输出a的值为1。(形参p的改变不会影响到实参a的值,a的值仍为1).因此答案为C.l& 在传递数值时,形参和实在分别占据不同的存储单元(形参变量只有在被调用时才分配内存单元,调用结束后,即刻释放分配的内存单元)&&&&&& 例1、(07-04-25)若函数调用时的实参为变量时,以下关于函数形参和实参的叙述中正确的是( D)&&& A)函数的实参和其对应的形参共占同一存储单元&&& B)形参只是形式上的存在,不占用具体存储单元C)同名的实参和形参占同一存储单元&D)函数的形参和实参分别占用不同的存储单元&&& 【解析】本题考点是函数的参数定义,在函数中,主调数中里边的参数叫做实参,而被调函数里边的参数叫做形参,当函数传递时,传递的是值,它们占用的不是同一存储单元,而且在传递中,是单向传的,由实参传向形参。l& &“传值”与“传址”的区别:传数值的话,形参的变化不会改变实参的变化。传地址的话,形参的变化就有可能改变实参所对应的量。&&&&&& 例1:(10-03-26)有以下程序&&&&&& #include &stdio.h&&&&&&& void fun(char *c,int d)&&&&&& {&&&& *c=*c+1;&& d=d+1;&&&&&& &&&&&& printf(“%c,%c”,*c,d);&&&&&& }&&&&&& main()&&&&&& { char b=’a’, a=’A’;&&&&&& & fun(&b,a);&&&&&& & printf((“%c,%c\”,b,a);&&&&&& }&&&& 程序运行后的输出结果是(A)&&&&&& A) b,B,b,A&&&& &&&&&& B)b,B,B,A&&&&& &&&&&& C)a,B,B,a&&&&&& &&&&&& D)a,B,a,B4、知识点:函数调用的一般形式和调用方式l& 函数调用的一般形式为:函数名(实际参数表);实参可以是常数、变量或其他构造类型数据及表达式,也可以没有(当为无参函数时)l& 函数调用的方式:&&&&&& (1)函数表达式:函数作为表达式中的一项出现在表达式中,以函数返回值参与表达式运算。例如:z=max(x,y);&&&&&& (2)函数语句:函数调用的一般形式上加上分号。例如:printf(“%d\”,a);(3)函数实参:函数作为另一个函数调用的实际参数出现。例如:printf(“%d”,max(x,y));l& 程序从main函数进入,上往下执行,当碰到函数名后,把值传给调用函数,当程序得到了返回值或调用函数结束,再顺序往下执行,最后到main函数结束。5、知识点:函数的声明及其位置l& 函数要“先定义后调用”,或“先声明再调用后定义”。函数的声明一定要有函数名、函数返回值类型、函数参数类型,但不一定要有形参的名称。一般形式为:类型说明符被调函数名(类型形参,类型形参…); 或&&& 类型说明符被调函数名(类型,类型…);注意:其末尾“;”不能省例如:int max(int a,int b);&&& 或&& int max(int ,int);&两者功能相同例1、(06-09-32)若有以下函数首部&& &&&&&&& &&int fun(double x[10],int *n)&& &&&&&&& &&则下面针对此函数声母语句中正确的是(D)&&&&& && &A)int fun(double x,int *n);&B)int fun(double,int);&& &&&&&&C)int fun(double*x,int n);&D)int fun(double *,int。);&&& 【解析】本题考点是对函数的声明,在函数声明的时候,其格式如下:返回值类型函数名(参数类型[参数名],参数类型[参数名]……)其中,参数名可以不写,但是参数类型一定要写全l& 省去主调函数中对被调函数的函数说明的几种情况:(1)被调函数的返回值是整型或字符型时(返回值自动按整型处理)(2)当被调函数的函数定义在主调函数之前时(3)在所有函数定义之前,在函数外预先说明了各个函数的类型例2:(10-09-24)有以下程序&&&&& #include&stdio.h&&&&&& int f(int x);&&&&& main()&&&&& { int n=1,m;&&&&& &m=f(f(f(n)));& printf(“%d\”,m);&&&&& }&&&&& int f(intx)&&&&& { returnx*2;}&&&&& 程序运行的输出结果(&D& )&&&&& A) 1 &&&&&& B)2& &&&&&& &&&&&& C)4& &&&&&& &&&&&& D)8【解析】f函数定义在main下面,但在外部进行声明int f(int x);因此在main中可直接调用。三次调用函数:f(n)=f(1)=2& f(2)=4&f(4)=8 m=f(f(f(n)))=f(f(f(1)))=f(f(2))=f(4)=8例3:(11-03-12)有以下程序,请在 【12】处填写正确语句,使程序可正常编译运行。【12】;main(){ &&& doublex,y,(*p)();scanf(&%lf%lf&,&x,&y);p=printf(&%f\&,(*p)(x,y));}double avg(double a,double b){ return((a+b)/2);}答案:double avg(double a,doubleb); 或double avg(double ,double );【解析】当函数定义在调用之后,调用前必须对函数进行申明,申明的形式和函数定义中的函数头部分相同,最后加分号即可。 6、知识点:函数的嵌套调用l& C语言中不允许作嵌套的函数定义,但是允许在一个函数的断定仪中出现对另一个函数的调用,即嵌套调用。例1:(06-04-33)有以下程序&& &&intfunl(double a){return& a*=a;}&& &&int fun2(double x,double y)&&& {double a=0,b=0;&& &&a=funl(x);b=funl(y);return (int)(a+b);}main()&& &{double&w;w=fun2(1.1,2.0);……}&&& 程序执行后变量w中的值是( C )&& &&&&&&& &A)5.2l&&&B)5&&& C)5.0& D)0.0【解析】此题考查函数的嵌套调用。main函数中调用了fun2函数;fun2函数中又调用了如fun1函数w=fun2(1.1,2.0)--&w=(int)(funl(1.1)+funl(2.0))àw=(int)5.21;w值为5,但是w是double类型变量,故将5转换成5.0赋值给变量w例2、(09-3-24)有以下程序#include&stdio.h&int f(int x,int y){return ((y-x)*x);}main(){&&&& int a=3,b=4,c=5,d;&&&&&& d=f(f(a,b),f(a,c));&&&&&& &&&&&& printf(“%d\”,d);&&&&&& }&&&& 程序运行后的输出结果是(& B )&&&&&& A) 10&&& B)9 &&&&&& C)8& &&&&&& D)7【解析】程序的main()函数中,定义了4个变量,前3个分别初始化,D用来接收调用函数后返回的值,主函数一共调用了3次f()函数,第一次传递a,b的值,给形参x,y,返回(y-x)*x的值为3,第二次将a,c的值传递给形参x,y,返回(y-x)*x的值为6,接着将f(a,b),f(a,c)的值3、6传递给形参,执行后返回值9,赋值变量d,最后输出结果为97、知识点:函数的递归调用l& 函数直接或间接地调用自己称为函数的递归调用。递归调用必须有一个明确的结束递归的条件。在做递归题时可把递归的步骤一步步写下来,不要弄颠倒了。例1、(04-09-37)在函数调用过程中,如果函数funA调用了函数funB,函数funB又调用了函数funA,则 ( B )&&& A)称为函数的直接递归调用&&& B)称为函数的间接递归调用&&& C)称为函数的循环调用&&& D)C语言中不允许这样的递归调用【解析】此题考查函数递归的基本概念。一个函数直接或间接调用自己称为函数的递归调用;若直接调用了自己,则称为直接递归调用,若间接调用了自己则称为间接递归调用;根据间接递归调用的概念可知,本题中的函数调用为间接递归调用。例2、(09-09-15)#include &stdio.h&fun(int x){&&&& if(x/2&0) fun(x/2);&&&&&& printf(“%d& ”,x);}main(){&& fun(6);&& printf(“\”);}程序运行后的输出结果是__1& 3& 6______【解析】程序的执行过程是先递推、后递归的过程。当x=1时,条件不成立,递推终止。程序执行流程参照示意图。例3:(10-03-33)有以下程序#include &stdio.h&int f(int t[],intn);main(){ int a[4]={1,2,3,4},s;&s=f(a,4); printf(“%d\”,s);}int f(int t[],int n){&&&& if(n&0)return t=[n-1]+f(t,n-1);&&&&&& elsereturn 0;}程序运行后的输出结果是( B)A) 4 &&&&&& B) 10&&&&& &&&&&& C)14&&&& &D)6【解析】s=f(a,4)=t[3]+f(a,3)=4+f(a,3)=4+t[2]+f(a,2)=4+3+f(a,2)=7+t[1]+f(a,1)=7+2+f(a,1)=9+t[0]+f(a,0)=9+1+f(a,0)=10+0=10例4:(11-03-32)设有如下函数定义 int fun(int k){ &&& if(k&1) return 0;else if(k==1) return 1;else return fun(k-1)+1;}若执行调用语句:n=fun(3);,则函数fun总共被调用的次数是( B)A)2&&&&&&&&&&&&&&& B)3&&&&&&&&&&&& C)4&&&&&&&&&&&&&& D)5【解析】递归调用,fun(3)—& fun(2)—& fun(1) ;fun(1)—1—& fun(2)—2—& fun(3)—3—&n;所以fun总共被调用的次数是3,最后n为3。例5:(11-03-34)有以下程序 int fun (int x,int y){ &&& if(x!=y) return ((x+y)/2);else return (x);}main(){ &&& inta=4,b=5,c=6;printf(&%d\&,fun(2*a,fun(b,c)));}程序运行后的输出结果是( B)A)3&&&&&&&&&&&&& B)6&&&&&&&&&&&&& C)8&&&&&&&&&&&&&&& D)12【解析】函数递归调用,fun(8,fun(5,6)),其中fun(5,6)因为5!=6, return ((x+y)/2)为5,所以fun(8,fun(5,6))为fun(8,5),8!=5, return ((x+y)/2)为68、知识点:局部变量和全局变量l& 在一个函数内部或复合语句内部定义的变量,它只在本函数范围内有效,也就是说只有在本函数内才能使用它们,在函数以外是不能使用这些变量的。这称为局部变量,局部变量又称为内部变量。函数的形参也属于局部变量。l& 在函数外部定义的变量,称为全局变量,又称为外部变量。全局变量可以被本文件的其他函数所共用。例1、(07-09-40)在一个C语言源程序文件中所定义的全局变量,其作用域为(D)&&&&&& A)所在文件的全部范围&&& B)所在程序的全部范围&&&&&& C)所在函数的全部范围&&& D)由具体定义位置和extem说明来决定范围【解析】本题考点是全局变量的作用域,全局变量的作用域是,从变量定义开始,一直到程序程结束为止,当然,也可以在其它文件中用这个以定义的全局变是,但是要通过extern来进行声明,本题答案选D。例2、(09-09-11)有以下程序#include&stdio.h&int a=5;void fun(int b){&&&& int a=10; a+=b;&&&&&& printf(“%d”,a)}main(){&&&& int c=20;fun(c); a+=c;&&&&&& printf(“%d\”,a);}程序运行后的输出结果是____3025____【解析】全局变量的作用域为定义开始到文件结束。局部变量的作用域为定义其函数内部。当局部变量与全部变量同名时,在局部变量作用域内,全部变量不起作用。执行函数fun(c):&&& 实参c&将值传给形参b,即b=20,函数内部定义局部变量a起作用,a=10,a+=b &&&&&& a=a+b=10+20=30,输出a的值为30返回到主函数:&&& a+=c 此时a为全局变量的值&&&&& a=a+c=5+20=25 输出a值25注意格式控制符无空格,所以连续输出9知识点:变量存储类别(auto变量、register变量、static变量)?& 静态变量(static):(1)在编译时分配存储空间,所占存储单元直到程序结束时才释放,它的值在程序运行过程中一直存在,且变量的初始化只进行一次。(2)static说明符可以用于全局变量,也可用于局部变量(auto和resgiter不可以定义全局变量)但是,当它说明变量后,只要这个变量还在程序中存在,那么不管用到还是没有用到,它都将会占用内存单元。例1:(10-09-36)有以下程序:#include &stdio.h&int f(){&&&& static int x=1;&&&&&& x+=1;&&&&&}main()fun(c); a+=c;&&&&&& printf(“%d\”,a);}程序运行后的输出结果是____3025____【解析】全局变量的作用域为定义开始到文件结束。局部变量的作用域为定义其函数内部。当局部变量与全部变量同名时,在局部变量作用域内,全部变量不起作用。执行函数fun(c):&&& 实参c&将值传给形参b,即b=20,函数内部定义局部变量a起作用,a=10,a+=b &&&&&& a=a+b=10+20=30,输出a的值为30返回到主函数:&&& a+=c 此时a为全局变量的值&&&&& a=a+c=5+20=25 输出a值25注意格式控制符无空格,所以连续输出9知识点:变量存储类别(auto变量、register变量、static变量)?& 静态变量(static):(1)在编译时分配存储空间,所占存储单元直到程序结束时才释放,它的值在程序运行过程中一直存在,且变量的初始化只进行一次。(2)static说明符可以用于全局变量,也可用于局部变量(auto和resgiter不可以定义全局变量)但是,当它说明变量后,只要这个变量还在程序中存在,那么不管用到还是没有用到,它都将会占用内存单元。例1:(10-09-36)有以下程序:#include &stdio.h&int f(){&&&& static int x=1;&&&&&& x+=1;&&&&&}main()(1)自动变量的存储空间是当程序执行到定义它的函数或语句块时才分配,当函数执行结束后自动释放,变量的值也就不再存在。(2)局部变量的存储类别默认为auto,可以省略不写,但它不能定义全局变量。?& 寄存器变量(register):例1、(08-04-39)在C语言中,只有在使用时才占用内存单元的变量,其存储类型是( A )。&A)auto和register&& B)extern和register& C)auto和static& D)static和register【解析】auto变量在进入函数体时,系统为其分配存储单元,退出时自动释放;register是建议编译程序将变量的值保存在cpu的寄存器中,而不是占用内存单元;extern可以对全局变量加以说明,扩展其作用域,在整个程序中都有效,所以会一直占用内存单元;static说明符可以用于全局变量,也可用于局部变量,使变量在整个程序执行期间一直占用内存单元,本题答案选A。例2:(10-09-34)设函数中有整形变量n,为保证其在未赋初值的情况下初值为0,应该选择的存储类别是( C )&&&&&& A)auto& &&&&&& B)register&&&&&& &&&&&& C)static&& &&&&&& D)auto或register【解析】对于静态局部变量(static),如在定义时不赋初值的话,编译时自动赋初值0(对数值型变量)或空字符(对字符变量)。而对于自动变量(auto或者缺省不写),如果不赋初值则它的值是一个不正确的值。10、内部函数与外部函数l& 用static 进行说明的函数称为静态函数,也叫内部函数。静态函数只能被本编译单元体内的函数调用。一般形式:static 类型标识符 函数名(形参表) 例如:staticint fun(){…}11、知识点:库函数l& 函数可以分为库函数和用户自定义函数。库函数由C系统提供,用户无须定义,在调用C语言标准库函数时要包含include命令,include命令行以#开头;例1、(07-04-17)若有代数式&(其中e仅代表自然对数的底数,不是变量),则以下能够正确表示该代数式的C语言表达式是( C)&A)sqrt(abs(nx+ex))&&&&&&&&&&&&&&& B) sqrt(fbs(pow(n,x)+pow(x,e)))C)sqrt(fabs(pow(n,x)+exp(x,e)))&&& &D)sqrt(fabs(pow(x,n)+exp(x)))【解析】exp()函数的功能是返回以自然数e为底、函数参数x为幂的指数值ex &;pow(n,x)函数是计算nx ;fabs()函数的功能是返回函数参数的绝对值;sqrt()用于返回函数参数的平方根。所以正确答案为C。例2:以下说法不正确的是(B)A)标准库函数按分类在不同的头文件中声明B)用户可以重新定义标准库函数C)系统不允许用户重新定义标准库函数D)用户若需要调用标准库函数,调用前必须使用预编译命令将该函数所在文件包括到用户源文件中【解析】对每一类库函数,都有相应的头文件名,调用某个库函数时,用户在源程序中须用include命令包含其头文件名。每一类标准库函数是C语言本身提供的,用户不能重新定义标准库函数。12、知识点:数组与函数l& 数组用作函数参数有两种形式:把数组元素(下标变量)作为实参使用和把数组名作为函数的形参和实参使用。l& 数组元素作函数的实参与普通变量并无区别,所进行的传递是值,形参变量和实参变量占据由编译系统分配的两个不同的内存单元;l& 数组名作为函数参数时,所进行的传递是地址(相当于把实参数组的首地址赋予形参数组名或指针名),形参数组与实参数组为同一数组,共同拥有一段内存单元; 例1:()以下程序的主函数中调用了在其前面定义的fun函数#include&stdio.h&main(){double a[15],k;k=fun(a);}则以下选项中错误的fun函数首部是& ( D) A.double&fun(double& a[15])&& &&&&&& B.double& fun(double&*a)C.double&fun(double& a[])&&&&& &&&& D.double& fun(double&a)【解析】当一维数组名a作为实参时,对应形参有三种表示形式:*a、a[ ]、a[N]( 注:N为定义a数组时的元素个数)例1:(11-03-11)己知a所指的数组中有N个元素。函数fun的功能是,将下标k(k&0)开始的后续元素全部向前移动一个位置。请填空。Void fun(int a[N],int k){ &&&for(i=k;i&N;i++) a[【11】] = a[i];}答案:i-1【解析】a[i]的值赋给a[i-1]例2:(10-09-32)有以下程序#include &stdio.h&#define N 8void fun(int *x,int i){&& *x=*(x+i); }main(){&&&& inta[N]={1,2,3,4,5,6,7,8},i;&&&&&& fun(a,2);&&&&&& for(i=0;i&N/2;i++)&&&&&& { printf(“%d”,a[i]);}&&&&&& printf(“\”);}程序运行后的输出结果是(& C )A) 1 &3& 1& 3&&&&&& &&&&&& B)2& 2&3& 4&&&&&& &&&&&& C) 3& 2&3& 4&&&&& D) 1& 2& 3& 4【解析】数组名代表数组首地址,即a[0]的地址。函数调用:fun(a,2) 参数传递后,形参指针x获得数组首地址,即指向a[0],形参变量i=2;*x即为a[0],*(x+2)即a[2],*x=*(x+2)相当于a[0]=a[2],a[0]变为3,a[2]不变。返回到主程序:循环4次,输出a数组前4个元素:& 3 2 3 4例3:(10-09-25)有以下程序#include &stdio.h&void fun(char *s){& while (*s)&&&&&& {if (*s%2==0) printf(“%c”,*s);& s++;}}main(){&&&& char a[]={“good”};&&&&&& fun(a);printf(“\”);}注意:字母a的ASCII码值为97,程序运行后的输出结果是(& A& )A) d &&&&&& B)go&&&&&& C)god&&&& &&&&&& D)good【解析】调用fun(a)函数,实参字符数组名a传递给形参字符指针s,使s指向字符串“good”;在函数fun中对字符串进行遍历,如果指针s指向字符ASCII码值是偶数则输出该字符。在字符串“good”中,只有“d”的ASCII码值为偶数13指针与函数l& 函数指针变量是指向函数的指针变量。&&&&&& 定义的一般形式为:& 类型说明符(*指针变量名)();&& &&&例如: int (*pf)();&&&&&& 调用函数的一般形式:(*指针变量名)(实参表) 例如:z=(*p)(x,y);&&&&&& &&&&&& &&&&&& &&&&&& &&&&&& &&&&&& &&&&&?注: (*指针变量名)中的“()”不能少例1:(09-09-33)设有以下函数:void fun(int n,char *s){…}&& 则下面对函数指针的定义和赋值均正确的是( A )A)void (*pf)(); pf=&&&&&&&&&&&&B)void *pf();& pf=C)void *pf(); *pf=&&&&&& &&&&&&D)void (*pf)(int,char);pf=&【解析】本题考点为指向函数的指针的用法。函数名代表函数的入口地址,可以赋值给指向函数的指针。指向函数的指针应该定义为void (*pf)().如定义为void *pf(),则表示函数pf返回值为一个基类型为&void的指针。l& 函数指针变量不能进行算术运算。l& 指针型函数是指返回指针值的函数。定义的一般形式为: &&&&&&&& &&&&&& 类型说明符*函数名(形参表){…}& 例如:int *ap(int x,int y){}例1:(10-09-11)有以下程序#include &stdio.h&&int*f(int *p,int *q)&&main(){& int m=1,n=2,*r=&m;&r=f(r,&n)&; printf(”%d\”,*r)&;}int *f(int *p,int *q){&&&& return(*p&*q)&?p&:q&;}程序运行后的输出结果是______2_____【解析】本题中f是个指针型函数,返回值为指针值。如示意图。主程序中,指针r指向m,函数调用f(r,&n)时,实参传递给形参,形参指针p指向m,指针q指向n,*p的值为m的值1,*q的值为n的值2,所以函数返回值为q,返回给主程序中的指针r,即指针r指向了n,最后输出*r的值为n的值2.
分享给好友分享到微信朋友圈:第一步 打开微信底部扫一扫第二步 扫下面的文章二维码第三步 右上角点击转发下一篇:
相关文章Relevant
<li class="w first">从历史的角度来看,2017年有可能会为一些重大变化的“起头”,但不要期待很快就会有结果。文 | 韩福东来源:<li class="w first">习声回响,原声放送!<li class="w first">雾霾严重时你所在的省市公交车免费吗?<li class="w first">人的正常寿命是多少岁?按照密宗讲,是120岁.近代的虚云长老活到了一百二十岁.上次我去漳州佛光寺,妙智老和尚成就肉身菩萨...<li class="w first">前天,有微友发微信向“律师来了”咨询:我今年27岁,是一个全职妈妈,家在杭州.老公比我大5岁,也是杭州人,但他被公司外派...<li class="w first">不要去骗一个对你好的人,因为他不是对人人都好;一辈子碰到一个这样的人不容易.错过一辆车,可以等,错过一个人,也许就是一...<li class="w first">迪士尼新作《奇幻森林》今天跟大家见面了评分相当不错!老规矩,探片小分队提前试深浅总体上,这部电影还是很值进影院观看的单...<li class="w first">一中国女士从英国回来探亲,顺便带着她的洋老公和洋婆婆到中国旅游.这位女士有两个孩子,一个5岁,一个3岁,都是由她自己当全...<li class="w first">昨天,杭州的陈大姐接到前几天请假的保姆张阿姨从老家建德打来的电话,说自己的儿媳妇生了个儿子. 陈大姐连忙道喜祝贺,可是电...<li class="w first">就是他!他在三鹿奶粉事件中被记过处分,罚酒三杯后不降反升,当上了国家食药监局副局长、药品安全总监.而三聚氰胺案爆料人蒋...}

我要回帖

更多关于 c语言函数形参和实参 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信