什么是函数

什么是函数这个代码的运行结果是 1 首先看函数 我们用了一个函数名叫 function 的函数 然后再看函数内部 返回类型为 int 是整形 而括号里的 intx 就是形参 我在主函数传过去的 a 可以对应那个 x 这个函数的返回值就 x 1 因为传过去的 a 为 0 所以返回值是 1 我们常使用的 printf scanf 都是库函数 我们使用这些库函数 都需要引入头文件 例如 stdio h 就是标准的输入输出头文件 每个编译器的标准库提供的库函数不是完全一样的 库函数非常的多 所以库函数的学习不用着急一次性学完

1.函数的概率

数学中我们其实就⻅过函数的概念,⽐如:⼀次函数 y=kx+b ,k和b都是常数,给⼀个任意的x,就会得到⼀个y值。
其实在C语⾔也引⼊函数(function)的概念,有些翻译为:⼦程序,⼦程序这种翻译更加准确⼀些。 C语⾔中的函数就是⼀个完成某项特定的任务的⼀⼩段代码。这段代码是有特殊的写法和调⽤⽅法的。 C语⾔的程序其实是由⽆数个⼩的函数组合⽽成的,也可以说:⼀个⼤的计算任务可以分解成若⼲个较 ⼩的函数(对应较⼩的任务)完成。同时⼀个函数如果能完成某项特定任务的话,这个函数也是可以 复⽤的,提升了开发软件的效率。
在C语言中我们一般会见到两类函数
1.库函数
2.自定义函数
2.库函数
2.1标准库和头文件
我们常使用的printf,scanf都是库函数,我们使用这些库函数,都需要引入头文件,例如stdio.h就是标准的输入输出头文件,每个编译器的标准库提供的库函数不是完全一样的,库函数非常的多,所以库函数的学习不用着急一次性学完。
2.2库函数的使用方法
库函数的学习和查看工具有很多,比如:
C/C++官⽅的链接 https://zh.cppreference.com/w/c/header
cplusplus.com https://legacy.cplusplus.com/reference/clibrary/
3.自定义函数
库函数是一些我们常用的标准库里面有的函数,但是大多数情况下我们需要用到,不同的功能的函数来帮助我们解决问题
3.1自定义函数的语法形式
ret_type fun_name(形式参数)
{
  
}
ret_type指的是一个函数的返回值,可以是整形,浮点型,字符,也可以是指针也就是地址,当然我们不需要返回值时,可以在ret_type处用void表示返回值为空
fun_name指的是函数名字,可以任取但是最好取有意义的名字,以便我们使用
括号里面的是形式参数,对应的是实际参数,形式参数这可以填void可以表示不需要形参;当我们在主函数中使用函数时,使用的是实参,函数内部真正使用的是形参
接下来用代码演示:
#include<stdio.h> int function(int x) { return x+1; } int main() { int a=0; int ret=function(a); printf("%d\n",ret); return 0; }

这个代码的运行结果是1,首先看函数,我们用了一个函数名叫function的函数,然后再看函数内部,返回类型为int是整形,而括号里的int x就是形参,我在主函数传过去的a可以对应那个x,这个函数的返回值就x+1,因为传过去的a为0,所以返回值是1;

简单来说形参就是实参的临时拷贝,进入函数后建立形参,出函数后形参销毁,实参和形参是不一样的,因为他们两个的地址不一样,所以在函数中对形参进行赋值什么的是不会对实参有任何影响的

但是当我们传入的是指针,这个时候形参和实参就是同一个数了;

接下来用代码演示:

#include<stdio.h> void InitArr(int arr[5]) { int i=0; for(i=0;i<5;i++) { arr[i]=0; } } int main() { int arr[5]={1,2,3,4,5}; InitArr(arr); int i=0; for(i=0;i<5;i++) { printf("%d\n",arr[i]); } return 0; }

这个代码的运行结果是打印5个0,为什么会这样,是因为传参时传过去的arr时首素的地址,所以在函数中对数组赋值,会对实参造成影响。

4.函数的声明与定义

4.1单个文件

在C语言中,函数的使用遵从着先声明后使用的原则,函数的定义也是⼀种特殊的声明,所以如果函数定义放在调⽤之前也是可以的。

接下来用代码解释:

#include<stdio.h> int fun1(int x) { return x+1; } int fun2(int x) int main() { fun1(1); fun2(1); fun3(1); return 0; } int fun2(int x) { return x+2; } int fun3(int x) { return x+3; } 

这个代码在使用中是会报错的,原因时函数fun3在主函数前面未声明但是却使用而函数fun1和fun2都是对的,fun1声明之后直接定义,fun2声明后在主函数后定义都是正确的

4.2多个文件

⼀般在企业中我们写代码时候,代码可能⽐较多,不会将所有的代码都放在⼀个⽂件中;我们往往会根据程序的功能,将代码拆分放在多个⽂件中。
⼀般情况下,函数的声明、类型的声明放在头⽂件(.h)中,函数的实现是放在源⽂件(.c)⽂件中
例如我要写一个关于加法的函数
add.c代码如下
add.h代码如下
test.c代码如下

 

可以看到当我们使用多文件实现函数时,一个源文件用来放主函数和使用自定义函数,一个源文件用来定义函数,一个头文件用来声明自定义函数,如果上面所说的使用函数时要引入对应的头文件,自定义函数的头文件不是用<>而是用" "双引号
5.static和extern
statiche和extern都是C语言中的关键字
static是静止的意思,可以用来:
1.修饰局部变量
2.修饰全局变量
3.修饰函数
extern是用来声明外部符号的
在讲解static和extern之前先讲讲“作用域和生命周期
作⽤域(scope)是程序设计概念通常来说,⼀段程序代码中所⽤到的名字并不总是有效(可⽤)
的,⽽限定这个名字的可⽤性的代码范围就是这个名字的作⽤域。
1. 局部变量的作⽤域是变量所在的局部范围。
2. 全局变量的作⽤域是整个⼯程(项⽬)。
⽣命周期指的是变量的创建(申请内存)到变量的销毁(收回内存)之间的⼀个时间段。
1. 局部变量的⽣命周期是:进⼊作⽤域变量创建,⽣命周期开始,出作⽤域⽣命周期结束。
2. 全局变量的⽣命周期是:整个程序的⽣命周期。
static修饰局部变量时可以改变变量的生命周期,使其从栈区转变为静态区相当于全局变量一样
static修饰全局变量和函数时,会使变量作用域缩短,使得无法被extern修饰用在其他文件中
extern可以声明外部变量,比如刚刚在add.c中声名一个a=10,如果想在test.c中使用可以在test.c中使用extern来使用a;
这就是我对函数方面的理解,如果有什么错误欢迎指出
今天的文章 什么是函数分享到此就结束了,感谢您的阅读。
编程小号
上一篇 2024-12-16 14:46
下一篇 2024-12-16 14:40

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ji-chu/87965.html