c语言函数指针 函数的调用

C语言中不允许作嵌套的函数定义。因此各函数之间是平行的,不存在上一级函数和下一级函数的问题。但是C语言允许在一个函数的定义中出现对另一个函数的调用。这样就出现了函数的嵌套调用。即在被调函数中又调用其它函数。这与其它语言的子程序嵌套的情形是类似的。其关系可表示如图。
图表示了两层嵌套的情形。其执行过程是:执行main函数中调用a函数的语句时,即转去执行a函数,在a函数中调用b 函数时,又转去执行b函数,b函数执行完毕返回a函数的断点继续执行,a函数执行完毕返回main函数的断点继续执行。
【例8-4】计算s = 22! + 32!
本题可编写两个函数,一个是用来计算平方值的函数f1,另一个是用来计算阶乘值的函数f2。主函数先调f1计算出平方值,再在f1中以平方值为实参,调用 f2计算其阶乘值,然后返回f1,再返回主函数,在循环程序中计算累加和。
#include &stdio.h&
long f1(int p){
long f2(int);
long f2(int q){
for(i=1;i&=q;i++)
int main(void){
for (i=2;i&=3;i++)
s=s+f1(i);
printf(&\ns=%ld\n&,s);
在程序中,函数f1和f2均为长整型,都在主函数之前定义,故不必再在主函数中对f1和f2加以说明。在主程序中,执行循环程序依次把i值作为实参调用函数f1求i2值。在f1中又发生对函数f2的调用,这时是把i2的值作为实参去调f2,在f2 中完成求i2!的计算。f2执行完毕把C值(即i2!)返回给f1,再由f1返回主函数实现累加。至此,由函数的嵌套调用实现了题目的要求。由于数值很大,所以函数和一些变量的类型都说明为长整型,否则会造成计算错误。关于LInux C语言函数调用的细节与实现_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
关于LInux C语言函数调用的细节与实现|很​好​的​C​语​言​资​料
把文档贴到Blog、BBS或个人站等:
普通尺寸(450*500pix)
较大尺寸(630*500pix)
你可能喜欢python[最新]最新,最新版
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
如何在C语言中调用python函数
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口C语言 函数调用 高手进_百度知道
C语言 函数调用 高手进
1:#include&stdio.h&void fun(int a,int b){
t=a;a=b;b=t;}main(){ int c[10]={1,2,3,4,5,6,7,8,9,0},i;
for(i=10;i&10;i+=2) fun(c[i],c[i+1]);
for(i=0;i&10;i++) printf(&%d,&c[i]);
printf(&\n&);}上面这段C程序,前面定义了功能函数fun 为无返回值,为什么在后面的FOR循环中又调用了这个函数啊????2:viodf(int *x,*y){ t=*x,*x=*y;*y=t;}main(){int a[8]={1,2,3,4,5,6,7,8},i,*p,*q;
p=a;q=&a[7];
while(p&q)
{f(p,q);p++;q--;}
for(i=0;i&8;i+)printf(&%d,&,a[i]);}这条程序的运行结果是 8,7,6,5,4,3,2,1这条程序也是在开始时候定义了无返回值,但后面也调用了函数f。想问问大家,为什么定义了无返回值函数,还是可以调用,另外请高手告诉我,无返回值viod一般在什么情况下用啊?谢谢
在函数里的形参改变了,但形参不会返回,也不会影响 MAIN坎取浑渡峒盗圾醛嫉互函数,是不是可以理解给上面的功能函数可以删去????
提问者采纳
第一串代码里有个错误,第九行缺少一个逗号,改为printf(&%d,&,c[i]);。另外,在C语言中,不加类型说明的函数,一律被视为整型的函数。第一串代码main函数是void型的。main前缺少void,在TC2.0中可以运行,但在TC++3.0和VC++6.0是不能运行的。至于第一串代码,由于我不知道它是干什么的,所以在我看来定义的那个函数根本没用。因为 for(i=10;i&10;i+=2) fun(c[i],c[i+1]);是不会执行一次循环体的。如果函数参数是数组,由于形参和实参占用同样的内存单元,所以形参变化,实参也跟寓呗价怪猬肝艰硕渐静着变化。例如:#include&stdio.h&void main(){ void fun(int x[],int y[]); int c[10]={1,2,3,4,5,6,7,8,9,0},d[10]={0,9,8,7,6,5,4,3,2,1},i;
fun(c,d); for(i=0;i&10;i++) printf(&%d &,c[i]);//输出数组c[i]中的值}void fun(int x[10],int y[10]){
int i,t=0;
for(i=0;i&10;i++)
x[i]=y[i];
}}这是我对第一段程序的修改,使它和第二段程序的功能相同。但对于函数参数是整型等基本类型数据,值的传递是单向,即只能从实参传向形参。自己定义函数时,无返回值不代表无意义。在指针里很多函数都无返回值,如你的第二段代码。我不知道说清楚没有,若果没有。我们可以继续探讨。
其他类似问题
按默认排序
其他4条回答
1.虽然无骏话晦截岑夹浑细绩麓返回值,但已经交换了c[i],c[i+1]的值;2.无返回值的函数,常用于处理数据关系(如:显示内容等)自己想想吧!
调用函数无返回值,但仍改变主函数变量值的情况有三种。1用数组,你提问的一个例子,相当于a,b和数组地址对应而不是只引用其的值,如果a,b和一般的形参对应如b,c,即只引用b,c的值,此时调换的只是a,b的值。2通过指针变量,调用函数的指针可以改变对应主函数里的变量值(就是你的第二个例子)。3全局变量,即所有函数中通用,你在主函数和调用函数中引用这个变量都能改变其值。 问题补充:是的
你的第一个程序应该调用以后没有任何作用,因为形参的改变不会影响实参,第二个是因为用了指针,所以可以实现交换。无返回值一般用于不需要返回数据的时候,比如用了传地址的方法(指针,数组),或者你的输出在该函数里完成就不用返回了。
应该达不到要的结果 形参与实参之间是单向传值得
函数调用的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁}

我要回帖

更多关于 c语言函数调用 的文章

更多推荐

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

点击添加站长微信