c语⾔的⼦函数有什么作⽤是什么意思,C语⾔程序中什么是函
数
C语⾔的函数问题是困扰很多学者的问题的,c程序中也有⼀定的函数的。那么下⾯⼀起来看看店铺为⼤家精⼼推荐的c程序中的函数,希望
能够对您有所帮助。
C语⾔读书笔记:函数
先来看看函数的⼀般形式,尝试写⼀个加法的函数:
思路是这样的:⾸先得有头⽂件,头⽂件之后就得写主函数,主函数的内部应该就是加法的过程,我们将所有加法的语句都拿出来组成⼀个
函数。代码如下:
#include
intadd(inta,intb);
intmain()
{
intresult=add(3,5);
printf("sumis%dn",result);
return0;
}
intadd(inta,intb)
{
intsum;
sum=a+b;
returnsum;
}
这是⼀个最简单的函数,描述了⼀个加法函数的定义和调⽤的过程。
intadd(inta,intb)成为函数的⾸部。
有了⾸部之后,就得考虑⼀件事情,将⾸部复制之后,加上⼀个分号,粘贴在主函数之前,作为函数的原型声明。试想,我们在主函数⾥边
是不是要先定义变量result才能使⽤result?那么函数的道理也是⼀样的,当程序运⾏到主函数中语句“intresult=add(3,5);”的时候,
如果向上没有寻找到add()的定义,那么编译器⼀定就会报错。所以要不然添加函数的原型声明,要不然就将函数的定义直接写在主函数之
前。
函数⾸部intadd(inta,intb)中的第⼀个int,即add之前的这个int称为函数的类型。表明这个函数将要返回⼀个整数类型的值。这个类型
可以是C语⾔中任何被允许的数据类型,包括void,意为⽆返回值类型,即这个函数不需要返回任何的值。
函数⾸部intadd(inta,intb)中的add称为函数的名字,简称函数名。
函数⾸部intadd(inta,intb)中inta和intb称为函数的形式参数。这⾥形式参数理论上可以有⽆穷多个,当然,现实情况下3-5个就已经算
是很多了;形式参数中,即使a和b都是int类型的,也要分别定义才⾏;形式参数可以在函数中直接使⽤,⽆须再次定义;形式参数是⽤来告诉调
⽤者,你应该给我传递来什么样⼦的数据,我好利⽤你给我的数据在函数中进⾏计算。
intadd(inta,intb){}中的{}就是函数体的内容了。函数需要进⾏的所有的操作都要放在这对⼤括号中。想必⼤家也看到了函数体中最后有
⼀条语句是return,这条语句起到的作⽤就是返回函数计算的结果,在这个程序中就是将加法的结果返回给主函数。需要注意的是,函数的
类型和返回值的类型必须严格⼀致!
函数的定义到此为⽌,接下来讲讲函数的调⽤⽅式。只要定义好函数,通过函数名(实际参数1,实际参数2,实际参数n)这种⽅式就可以调
⽤函数了。例如主函数中的“intresult=add(3,5);”,就是调⽤了add函数。这⾥,3和5称为实际参数,即你究竟想让函数帮你计算哪
两个数的加法结果,你就在这个括号⾥边写哪⼏个数字。必须要严格遵守的规定:实际参数和形式参数必须⼀⼀对应,数量应该相同,类型
也保持⼀致。
理解了这⼏点之后,⼀个基本的函数就已经可以写出来了。接下来来个题⽬尝试⼀下:
输⼊精度e,使⽤公式求π的近似值,精确到最后⼀项的绝对值⼩于e。公式:π=1-1/3+1/5-1/7+...
代码:
//⾸先得有头⽂件
#include
#include//后边要使⽤到fabs绝对值函数
//然后就是主函数了
intmain(void)
{
doublepi,e;//定义所需变量
doublef_pi(doublee);//原型声明。函数名只要符合命名规则即可//因为要求⼩于e,所以也将这个e传递过去
printf("entere:");//输⼊的提⽰
scanf("%lf",&e);//double类型的e对应%lf,记住不要缺少&
printf("pi=%lfn",f_pi(e));//函数返回的是个double类型的值,直接输出
return0;
}
doublef_pi(doublee)//函数⾸部,形参和实参⼀定要对应,可以重名
{
intdenominator,flag;
doubleitem,sum;
//请注意“先定义,然后赋初值再使⽤”的好习惯
flag=1;//负责变换正负符号的变量
denominator=1;//分母初值为1,第⼀项的1为1/1
item=1.0;//存放每⼀项的值
sum=0;
while(fabs(item)>=e)//满⾜条件就循环
{
item=flag*1.0/denominator;//计算每⼀项的值。flag控制符号
//1.0必须写出⼩数位,否则整项就变成⼀个整型值
sum+=item;//累加
flag=-flag;//符号正负切换
denominator=denominator+2;//分母递增
}
returnsum;//sum的类型和函数的类型必须⼀致
}
函数的定义和调⽤其实并不难理解,相信很多⼈困扰在参数的传递上,接下来总结⼀下函数参数传递的⼏种⽅式:
正常的参数调⽤,例如int、float、double等⼀⼀对应的传递。
⽆参数,也⽆返回值。例如下列代码就只是为了输出⼀些语句。这种做法在语法上是被允许的,但是并不推荐这么写。
voidprintf()
{
printf("helloworld!");
}
3.参数是数组的名字。我们知道数组的名字是个地址,那么如果实参是数组名的话,我们可以将形参设置成指针,指向实参传递过来的数组
的⾸地址。
4.参数是指针。如果实参是指针,那么形参肯定也得是指针。保持类型⼀致即可,然后在函数内部再对指针进⾏操作。
5.参数是结构体。如果实参是结构体,⼀般来说我们使⽤结构体指针来做形参⽐较合适。
还是在此分割⼀下吧,说了这么多,可能很多⼈在问问什么函数定义这么⿇烦,还要定义函数,直接都写在main函数中多⽅便?
⾮也!
C语⾔是⼀个过程化的语⾔,C语⾔中的主函数其实是⽤来主导程序的进程和数据的流动⽅向的。如果将主函数写的过于复杂,我们阅读程
序的结构就会⾮常的费⼒。
C语⾔中的函数回调
什么是回调函数?
简⽽⾔之,回调函数就是⼀个通过函数指针调⽤的函数。如果你把函数的指针(地址)作为参数传递给另⼀个函数,当这个指针被⽤为调⽤它
所指向的函数时,我们就说这是回调函数。
为什么要使⽤回调函数?
因为可以把调⽤者与被调⽤者分开。调⽤者不关⼼谁是被调⽤者,所有它需知道的,只是存在⼀个具有某种特定原型、某些限制条件(如返
回值为int)的被调⽤函数。
本文发布于:2022-11-26 20:53:01,感谢您对本站的认可!
本文链接:http://www.wtabcd.cn/fanwen/fan/90/26521.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |