C语言嵌套函数封装替换,函数可以嵌套定义但不能嵌套调用吗,嵌套函数

本文详细介绍了C语言中函数的定义、调用和嵌套调用的概念。函数不能嵌套定义,但可以嵌套调用。通过示例展示了如何在函数内部调用其他函数,解释了函数调用的过程,并强调了main函数作为程序执行起点的角色。此外,还讨论了函数作为代码重用单元的重要性以及参数和返回值在函数中的作用。
摘要由CSDN通过智能技术生成

函数可以嵌套定义但不能嵌套调用吗一个函数可以被定义为嵌套的,但不能被称为嵌套的吗,不对,函数可以嵌套调用,但不能嵌套定义。在C语言中,所有函数都是并行的,即定义函数时相互独立,一个函数不从属于另一个函数,即函数不能嵌套定义,但可以相互调用,但不能调用主函数。

26f1ec2fb1d74f7cd5fa34abe0895a16.png

教程: windows 7系统的操作环境,C99版本,戴尔G3电脑。

错,函数可以嵌套调用但不可以嵌套定义。

C语言 函数

函数是一段可重用的代码,用来独立完成某个功能。它可以接收用户传递的数据,也可以不接收。接收用户数据的函数在定义时要指定参数,没有接收用户数据的不需要指定。根据这一点,函数可以分为参数函数和非参数函数。

将代码段封装成函数的过程称为函数定义。

函数的定义

如果函数没有接收到用户传递的数据,可以不用参数进行定义。如下所示:

数据类型函数名(){

//正文

}如果函数需要接收用户传递的数据,必须用参数定义。如下所示:

数据类型函数名(数据类型1参数1,数据类型2参数2.){

//正文

}dataType是返回值类型,可以是c语言中的任何数据类型,如int、float、char等。

函数名是函数名,是一种标识符。命名的规则与标识符相同。函数名后面的括号()不能少。

数据类型1参数1,数据类型2参数2.是参数列表。一个函数只能有一个参数或多个参数,多个参数之间用。参数本质上也是变量,所以定义时要注明类型和名称。与无参数函数的定义相比,无参数函数的定义只多了一个参数表。

Body是函数体,是函数需要执行的代码,是函数的主体部分。即使只有一个语句,函数体也要用{}包围。

如果有返回值,使用函数体中的return语句返回。返回数据的类型应该与dataType相同。

Return是C语言中的一个关键词,只能用在函数中返回处理结果。

示例:

#包含stdio.h

int sum(){

int i,sum=0;

for(I=1;i=100i ){

sum=I;

}

返回总和;

}

int main(){

int a=sum();

printf(‘总和为%d\n ‘,a);

返回0;

}操作结果:

sum是5050函数不能嵌套,main也是函数定义,所以把sum放在main之外。函数必须在使用前定义,所以sum应该放在main之前。

注意:main是函数定义,不是函数调用。当可执行文件载入内存后,系统从主函数开始执行,也就是系统会调用我们定义的主函数。

教程:推荐《c语言教程视频》

函数调用

所谓函数调用,就是使用一个定义好的函数。函数调用的一般形式是:

函数名(param1,param2,param3.);函数名是函数名,参数1,参数2,参数3.是参数列表。参数可以是常量、变量、表达式等。多个参数用逗号分隔。

在c语言中,有许多方法可以调用函数,例如:

//信件

数作为表达式中的一项出现在表达式中

z = max(x, y);

m = n + max(x, y);

//函数作为一个单独的语句

printf("%d", a);

scanf("%d", &b);

//函数作为调用另一个函数时的实参

printf( "%d", max(x, y) );

total( max(x, y), min(m, n) );

函数的嵌套调用

函数不能嵌套定义,但可以嵌套调用,也就是在一个函数的定义或调用过程中允许出现对另外一个函数的调用。

【示例】计算sum = 1! + 2! + 3! + … + (n-1)! + n!

分析:可以编写两个函数,一个用来计算阶乘,一个用来计算累加的和。

#include

//求阶乘

long factorial(int n){

int i;

long result=1;

for(i=1; i<=n; i++){

result *= i;

}

return result;

}

// 求累加的和

long sum(long n){

int i;

long result = 0;

for(i=1; i<=n; i++){

//在定义过程中出现嵌套调用

result += factorial(i);

}

return result;

}

int main(){

printf("1!+2!+...+9!+10! = %ld\n", sum(10)); //在调用过程中出现嵌套调用

return 0;

}

运行结果:

1!+2!+...+9!+10! = 4037913

sum() 的定义中出现了对 factorial() 的调用,printf() 的调用过程中出现了对 sum() 的调用,而 printf() 又被 main() 调用,它们整体调用关系为:

main() --> printf() --> sum() --> factorial()

如果一个函数 A() 在定义或调用过程中出现了对另外一个函数 B() 的调用,那么我们就称 A() 为主调函数或主函数,称 B() 为被调函数。

当主调函数遇到被调函数时,主调函数会暂停,CPU 转而执行被调函数的代码;被调函数执行完毕后再返回主调函数,主调函数根据刚才的状态继续往下执行。

一个C语言程序的执行过程可以认为是多个函数之间的相互调用过程,它们形成了一个或简单或复杂的调用链条。这个链条的起点是 main(),终点也是 main()。当 main() 调用完了所有的函数,它会返回一个值(例如return 0;)来结束自己的生命,从而结束整个程序。

函数是一个可以重复使用的代码块,CPU 会一条一条地挨着执行其中的代码,当遇到函数调用时,CPU 首先要记录下当前代码块中下一条代码的地址(假设地址为 0X1000),然后跳转到另外一个代码块,执行完毕后再回来继续执行 0X1000 处的代码。整个过程相当于 CPU 开了一个小差,暂时放下手中的工作去做点别的事情,做完了再继续刚才的工作。

更多计算机编程相关知识,请访问:编程视频!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值