数学中我们常见到函数的概念,但是你真的了解c语言的中的函数吗?
在c语言中有两类函数:库函数 ,自定义函数。
1.1库函数
printf strlen 等,这两个函数我们都不陌生吧,再有一点c语言基础的情况下,c语言设计者在早期,就考虑到一些可能大量使用的方法,比如打印功能,求字符串长度,假如不在前期对这些大量使用的函数进行提前编写封装,那么我们可能就要自己去写这些方法来完成相应的功能。
提高复用性,效率,可移植性,推荐网站www.cplusplus.com来学习库函数
c语言常用库函数:)
I/O函数 | (input/output printf scanf getchar putchar |
字符串操作函数 | (strlen strcmp strcpy strcat) |
字符操作函数 | (tolower touppper...) |
内存操作函数 | (memcpy memset memmove memcmp) |
时间日期函数 | (time...) |
数学函数 | (sqrt abs fabs pow) |
其他库函数 |
*使用库函数必须包含#include
1.2自定义函数
如果库函数能干所有事情,那么我们程序员岂不是要失业了,所以对于我们程序员来说更加重要的是自定义函数。自定义函数和库函数一样,有函数名,返回类型,和和函数参数
函数的组成
//写一个函数求两个数中较大值
get_max(int x,int y)//定义函数,未定义直接调用会报错,x,y为形参
{
return(x > y ? x : y);
}
int main()
{
int a =0;
int b=0;
scanf("%d%d", &a,&b);
//求两个数的较大值
int max = get_max(a,b);//a,b为实参
printf("max= %d\n",max);
return 0;
}
写一个函数交换两个变量
void Swap(int* px,int* py)
{
int z = 0;
z = *px;
*px = *py;
*py = z;
return;
}
int main()
{
int a = 10;
int b = 20;
printf("交换后:a=%d b=%d\n",a,b);
Swap(&a,&b);
printf("交换后:a=%d b=%d\n",a,b);
return 0;
}
大家可以看看我们采取了传址方式,用到了一点指针的概念,为什么要这么操作呢,在这里我先简单回答下假如我们用传值的形式(把a,b的值直接赋给函数里的x,y)那么会导致在函数中他会新在内存中创建两个空间,来放置复制过来的值,经过经过交换并没有对ab的值进行交换,不符合我么设计函数的预期
2.1函数参数
实际参数:
真实传给函数的参数;
可以是,常量,变量,表达式,函数等;
无论是何种类型的量,必须有确定的值
形式参数:
指函数名括号中的变量
调用后进行消除,不占用内存空间
未调用时不占用内存空间
2.2函数的调用
传址调用,传值调用两种,字面意思当调用时传递的分别是地址,和数值。
传值调用:函数的形参和实参分别占有不同的内存块,对形参对形参修改不影响实参
传址调用:传值调用是把函数外部创建变量的内存地址传递给函数的一种调用函数的方式。
这种传参方式可以让函数和函数外边的变量建立起真正的联系,也就是函数内部可以直接操作函数外部的变量。
正如上面我们列举的交换两个数值的函数调用就用到了传址调用,有过基础的朋友应该就发现对参数给了取地值&,也用到了指针的概念,指针我们在之后的章节会详细阐述这里一笔带过。