1.什么是函数(1)定义函数即子程序是一个大型程序中的某部分代码由一个或多个语句块组成。负责完成某项特定的任务与其他代码相比有相对的独立性2.C语言中的函数分类(1)库函数C语言自带的函数总结C语言中简单常见的库函数:IO函数字符串操作函数字符操作函数内存操作函数时间/日期操作函数数学函数其他函数比如a.strcpy()函数char * strcpy ( char * destination, const char * source ); //函数原型int main() { char arr1[20] {0}; char arr2[] {你好呀}; strcpy(arr1,arr2); //(目标数组源头数组) printf(%s\n,arr1); return 0; }b.memset()函数void * memset(void * prt ,int value, size_t num); //函数原型int main() { char arr[20] {hello world}; memset(arr,1,5); // 没有指定从数组哪个位置开始替换默认为首个元素即下标为 0 // memset(arr5,a,3); // 指定从数组元素下标为 5开始替换 helloaaarld printf(%s\n,arr); return 0; } // 11111 world(2)自定义函数和库函数一样有函数名、返回值类型和函数参数一般有。格式如下re_type fun_name(para1, *) // re_type:返回值类型 fun_name函数名 para1函数参数 //函数体 { statement; //语句项 }举例写一个函数交换两个整型变量的内容void Swap(int x,int y) { int temp 0; temp x; x y; y temp; } int main() { int a 0; int b 0; scanf(%d %d,a,b); printf(交换前%d, %d\n,a,b); // 交换 Swap(a,b); printf(交换后%d, %d\n,a,b); } // 交换前 10 20 // 交换后 10 20解引用交换值void Swap(int *px,int *py) { //*解引用操作符 *px 即将 px指针所指向的地址中的内容/值取出来px指向的元素a *px即取a的值 //*px: 包括了地址内所存的内容(a的值) int temp 0; temp *px; // temp *py 的值 temp里面存的是从px这个地址取回来的值px是地址*取内容取地址 *px *py; // *px 所指地址的内容 *py 所指地址的内容 *py temp; // *py 所指地址的内容 *py的值 } int main() { int a 0; int b 0; scanf(%d %d,a,b); printf(交换前%d, %d\n,a,b); // 交换 Swap(a,b); // 获取地址把ab的地址中的值进行更改 在地址中改值 printf(交换后%d, %d\n,a,b); }(3)总结需要传地址/不需要传地址需要对实参进行修改时传地址使用指针3.函数的参数( 形参和实参命名可以一致 )当实参传值给形参具有独立的空间时形参是实参的一份临时拷贝对形参的修改不会影响实参(1)实际参数真是传给函数的参数即调用函数时括号中的内容a.实参可以是常量、变量、表达式、函数等int Add(int x,int y) { return (xy); } int main() { int a 0; int b 9; Add(3,9); //实参为常量 Add(a,b); //实参为变量 Add(b8,b); //实参为表达式 Add(Add(b-2),a1); //实参为函数 }b.无论实参是何种形式、何种类型在进行函数调用时都必须有确定的值以便传给形参(2)形式参数调用函数时函数名后括号中的变量a.由于形式参数只有在函数被调用时才会被实例化分配内存单元—— 形式参数int fun_name(int a, int b) // a,b为形式参数 { ... } int main() { ... }b.形式参数只在函数体中有效形参当函数调用完成后就自动就会自动销毁4.函数的调用(1)传值调用函数的形参和实参分别占用不同的内存块地址对形参的修改不影响实参Swap(a,b)(2)传址调用a.把函数外部创建的内存地址传递给函数参数的一种调用函数的方法b.可以让函数和函数外部的变量建立联系——函数可以直接才做函数外部的变量Swap(a,b)