什么是函数
- 函数也叫子程序,是一个大型程序中的某部分代码,有一个或者多个语句块组成,它负责完成某项特定的任务,相较于其他代码具有相对独立性。
- 函数一般具有返回值和参数,提供对过程的封装和细节的隐藏。
函数的分类
库函数:
为什么要有库函数?
- 我们在学习C语言编程时,在代码完后运行时我们要输出结果,那么我们就要把信息数据按照一定的格式打印到屏幕 (printf)函数;还有就是要频繁使用字符串拷贝工作 (strcpy)函数等;
综上,所说的哪些功能虽然不是业务性代码。但是在开发的过程中都是会被用到的,那么为了支持可移植性和开发提高效率,,C语言就在基础库中添加这些库函数。(在使用对用的库函数是要包含对应封装该库函数的头文件)
C语言常用的函数:
- IO函数
- 字符串操作函数
- 字符操作函数
- 内存操作函数
- 时间/日期操作函数
- 数学函数
- 其他库函数
如何学习并且查看库函数?
www.cplusplus.com
自定义函数:
我们可知库函数并不是万能的他只是将一些开发中常用的以及一些重要的的接口进行了封装,但是并不能完成所有;更重要的就是程序员自己定义的函数,自定义函数有函数名、参数。返回值,但是不一样的就是由程序员自己设计。
函数的组成:
ret_type fun_name(para1,*)
{
statement;//语句项
}
ret_type:返回类型
fun_name:函数名称
para1:函数参数
举一个栗子,写一个可以交换两个整型变量的内容。
#include<stdio.h>
void Swap1(int x,int y)
{
int temp = x;
x = y;
y = temp;
}
void Swap2(int *px,int *py)
{
int temp = *px;
*px = *py;
*py = temp;
}
int main()
{
int num1 = 1;
int num2 = 2;
Swap1(num1, num2);
printf("Swap1::num1 = %d num2 = %d\n",num1, num2);
Swap2(&num1, &num2);
printf("Swap2::num1 = %d num2 = %d\n",num1, num2);
return 0;
}
函数的参数:
实际参数(实参): 真实传给函数的参数。实参可以是:常量、变量、表达式、函数等。到那会不敢实参是什么类型的变量,在函数调用时,他们必须都有确定的值,以便以传递给形参。
形式参数(形参): 指函数名后括号中的变量,因为形式参数只能在函数被调用时实例化(分配内存单元),所以叫形式参数。形式参数在函数调用完成后就会销毁,因此形式参数只在函数中有用;
上面写的函数中x、y、px、py都是形式参数,而传给函数的num1、num2、&num1、&num2都属于实际参数。
从上面的内存分配可以看到在调用函数swap1是形参x、y拥有自己的空间、同时拥有和实参一模一样的内容。所以我们可以简单地以为:形参实例化之后其实就是相当于实参的一份临时拷贝。
函数的调用
传值调用: 函数的形参和实参分别占用不同内存块,对形参的修改不会影响实参;
传址调用: 传址调用就是把函数外部创建的变量的内存地址传递给函数参数的一种调用函数的方式;这种传址的方式可以让函数和函数外部的变量建立起联系,也就是函数内部可以直接操作函数外部的变量;
嵌套调用:函数和函数之间可以进行有机的结合
#include<stio.h>
void new_line()
{
printf("hello world\n");
}
void three_line()
{
for(int i = 0; i < 3; i++){
new_line();
}
}
int main()
{
three_line();
return 0;
}
链式访问:把一个函数的返回值作为另外一个函数的参数
#include<stdio.h>
#include<string.h>
int main()
{
char arr[20] = "hello";
int ret = strlen(arr);
printf("%d\n",ret);
return 0;
}
函数的定义和声明
函数的声明:
1.告诉编译器有一个函数叫什么、参数是什么、返回类型是什么。但是是否存在不管心!!!
2.函数的声明一般出现在函数使用之前,满足先声明后使用
3.函数的声明一般放在头文件中
函数定义:
指的是函数的具体实现,交代代码功能
//test.h的内容 放置函数的声明
#ifndef __TEST_H__
#define __TEST_H__
//函数的声明
int Add(int x, int y
#endif //__TEST_H
//test.c的内容 放置函数的实现
#include "test.h"
//函数Add的实现
int Add(int x, int y)
{
return x+y;
}
int main()
{
int ret = Add(1+2);
printf("%d\n",ret);
return 0;
}