作者前言
个人主页::小小页面
gitee页面:秦大大
一个爱分享的小博主 欢迎小可爱们前来借鉴
__________________________________________________________
目录
1.函数是什么
2. 库函数
3. 自定义函数
4. 函数参数
5. 函数调用
6. 函数的嵌套调用和链式访问
7. 函数的声明和定义
8. 函数递归
_____________________________________________________
插播小知识
1. c99标准中,加入了变长数组的概念,数组的大小允许使用变量来指定,但是数组的大小一旦确定后,是不能再变化,变长数组不能初始化,VS环境不支持变长数组
2.define、#include 等不是关键字,是预处理指令
3.指针是地址,但是我们平时说p是指针,p是指针变量,所以我们的口头语的指针指的是指针变量
4. 求平均值的方法
方法1: (a+b)/2 (不建议写这个)
方法二:
只需把多出的部分进行平分,就行了
a+(b-a)/2
函数是什么?
就拿数学来讲,数学函数类似于f(x)=ax+b的形式,而C语言的函数就是类似于这样的,只不过
C语言的不仅仅有ax+b还有很多的内容在一起,共同组建成一个f(x),一般会有输入参数并有返回值,提供对过程的封装和细节的隐藏。
C语言中函数的分类:
1. 库函数
2. 自定义函数
库函数
简单的说库函数就是C语言编译器厂商提供的函数,使用这些库函数的前提是要调用头文件
,C语言只是起到一个规定这个函数怎能使用和创建,如下:
C语言标准规定:
1.函数的功能----比如计算字符长度
2.函数名-------strlen
3.参数--------strlen(const char* str)
4.返回类型--------isize_t
简单的总结,C语言常用的库函数都有:
有兴趣的小可爱可以来这里看看https://cplusplus.com/reference/cctype/
自定义函数
ret_type fun_name(para1, * )
{
statement;//语句项
}
ret_type 返回类型
fun_name 函数名
para1 函数参数
上面是函数的基本组成,简单就是 函数名 参数 函数体 返回类型
比如创建一个求两数最大值的函数定义
#include<stdio.h>
//int compare(int a, int b)
//{
// return (a > b ? a : b);
//}
int* compare(int* a, int* b)
{
return (*a > *b ? a : b);
}
int main()
{
int a = 1;
int b = 6;
compare(&a, &b);
printf("%d", *compare(&a, &b));
return 0;
}
当我们运行出来可以看出,使用第一种定义函数,没有改变nunm1和num2的值,这是因为将实参传递给形参,形参其实是实参的一种临时拷贝,对形参的修改,不会改变实参
第二种方法是通过操作地址来实现的,
.函数的参数
实际参数(实参)
简单的说就是传入值后的参数,如上图的&num1就是实参,(有真正的值),可以理解为调用函数后的参数变成了实参
实参可以是:常量、变量、表达式、函数等。
形式参数(形参)
形式参数是指函数名后括号中的变量,因为形式参数只有在函数被调用的过程中才实例化,
函数的调用:
#include<stdio.h>
#include<math.h>
int is_prime(int i)
{
int j = 0;
for (j = 2; j <= sqrt(i); j++)
{
if (i % j == 0)
{
return 0;
}
}
return 1;
}
int main()
{
int i = 0;
for (i = 101; i <= 200; i += 2)
{
int a = is_prime(i);
if (a)
{
printf("%d ", i);
}
}
return 0;
}
函数的嵌套调用和链式访问
嵌套调用
简单的说就是函数里面有函数调用,注意一下,函数定义不能在函数内部定义
总结:
C语言的函数先介绍到这里,后面还会有后续