1.什么是函数?
程序是由很多个“零件”组成的,而函数就是这样一个零件,其通常由一个或多个语句组成完成某一项特定任务。
函数可分为库函数和自定义函数,先来谈谈经常被使用的库函数吧
2.库函数
库函数是被封装好了的函数。C语言提供了C语言标准和库函数的约定到基础库中。
诸如:scanf、printf之类函数都是库函数,但正因为封装好了所以当我们调用的时候就需要包含#include开头的头文件。
3.指针
可能读者小萌新会好奇为什么我要突然在函数中穿插指针,那是因为在我们的自定义函数里面要需要这部分的知识啊,不过小萌新也不需要太担心,只是指针的一点点初阶知识,单纯让大家知道怎么是指针、指针怎么用于函数?
3.1什么是指针?
在C与语言学习过程里,指针是一个很重要的概念,它的作用是指示对象。
在广阔的内存空间里,存在着很多对象,这就需要用一种方式来各个对象在内存中的位置,也就是“地址”,地址也可以说成对象在内存存储中的位置编号。
3.2指针的简单操作
了解到地址这个个概念后,其实地址就是指针,跟着我一起来看下面这个语句
int a=10;
int *p=&a;
第一个语句很简单,初始化一个整型变量a;而第二个语句就要用到第三章学到的操作符了
取地址符&写在变量(对象)a前就可以获得a的地址。在第二个语句的等号前是声明定义了一个指向int 型的指针变量p。也就是说p里面存储了a的地址。这句话也可以说成是p指向x。、
*p=20;
a会发生怎样变化呢,答案是a也会变成20.这是因为当 指针运算符*用在指针变量前时,就可以显示指向地对象的内容。
4.自定义函数
事实上,我们不能仅仅依靠库函数,更多的功能等着我们自己去手动定义开发。
4.1自定义函数的声明和定义
自定义函数声明和定义都分三部分:返回类型、函数名、形参声明。
返回类型:返回值的类型
函数名:函数的名称,在调用时,使用函数名
形参声明:小括号括起来的一部分,用于接收形参
举个例子
#include <stdio.h>
int add(int a,int b)
{
return a+b;
}
int main()
{
int a=2,b=3;
int ret=add(a,b);
return 0;
}
这就是一个简单的加法函数定义和调用。
4.2声明和定义的注意事项
1.声明一般放于函数的调用之前
2.声明可以和定义放在一起,也可以将定义放于主调函数后面
3.定义也是一种特殊声明,不过若只有定义,就需要把定义放于主调函数开头。要不然计算机调用时将无法找到这一函数入口
4.3函数调用
实参:主调函数里面传过去的值
形参::被调函数里面函数参数
4.3.1传值调用
所谓传值就是将实参拷贝一份,传给形参,则形参值改变,实参不受影响
所以可以想到这种传参方式适用于不改变原有值的情况,
比如上图就可以看到,我送吗只是求和,无需改变两个数的值
4.3.2传址调用
将函数外部变量内存地址传给函数参数,从而函数内部可以通过指针来操作外部变量
这种方法常用于需要操作原有值的情况
上个实例来看看
#include<stdio.h>
void swap(int a,int b)
{
int temp=a;
a=b;
b=temp;
}
int main()
{
int a=2,b=3;
swap(a,b);
return 0;
}
5.小尾巴
函数还有很多知识,比如嵌套调用、链式访问、以及最重要的函数递归,这个是难点也是重点。
不适合入门讲解,所以我将会单独出一篇算法博客来讲解递归函数