C语言基础学习——函数

发布时间:2026/7/25 9:06:24
C语言基础学习——函数 函数定义实现函数就是把功能实现函数调用就是使用这个功能计算机模型函数功能类似输入-----处理-----输出一、函数定义类型标识符 函数名(形式参数) { 函数体 //声明部分语句部分 }1.类型标识符返回值类型说明符这个类型说明符用来规定返回值的类型的基本类型整型、浮点型、字符型 //注意数组类型不能用做函数返回值类型注意如果带出的结果类型和返回值类型说明符不一致最终结果以返回值类型说明符为准2.函数名是标识符用来表示是哪个函数命名规则符合标识符命名规则3.形式参数形参是函数获取数据的入口函数要处理数据可以通过形参获得egyx2 x就类似于形式参数实参和形参1.要求类型相同个数匹配2.实参和形参是一一对应的---位置对应3.不需要形参注意如果函数不需要传入数据可以不写形参 //不写形参或者写成void4.函数体实现函数功能的代码函数定义的位置1.写在main函数前面2.写在main函数后面 //写在后面需要提前声明函数函数声明复制函数头加上分号二、函数实现考虑1.功能是否独立单一2.健壮性 //看后期维护是否简单3.实用性流程step1先根据功能确定函数名step2从 输入-----处理-----输出 这个模型出发1.函数需要输入什么---需要哪些数据数据类型形参的语法每个形参都必须指明类型和变量名类型 变量名1类型 变量名2...eg: int a,int b //注意不能写成int a,bstep3处理数据函数体eg:int r a b;step4考虑要不要带出结果要带出结果---考虑返回值类型说明符---带出结果的语句egreturn 表达式不带出结果---返回值类型说明符 void空类型egadd函数int add(int a,int b) { int ret a b; return ret; } //or void add(int a,int b) { int ret a b; printf(ret %d\n,ret); }三、调用函数语法函数名实际参数//实参实参和形参1.要求类型相同个数匹配2.实参和形参是一一对应的---位置对应eg:add(1,2)注意函数调用的方式add() //函数调用语句add()3 //函数调用表达式printf(%d,add(1,2)); //函数调用充当参数嵌套调用egisLeapYear() { } getDays() { isLeapYear(); }函数实现调用的本质通过栈空间进行现场保护和恢复C语言中程序放到内存中栈区特点先进后出平常定义的局部变量都是放在栈空间局部变量的空间是自动申请自动释放的栈空间大小默认为8M堆区特点大空间需要程序员手动申请手动释放一般数据量比较大的时候使用全局区静态区全局变量字符串常量区“hello”代码区存放的就是程序代码指令程序 数据代码函数的嵌套调用特殊的嵌套---递归//自己调用自己直接递归:f1(){ f1(); }间接递归f2() { f1(); } f1() { f2(); }递归是一种特殊的循环---调用自身实现循环使用有些时候使用循环很复杂使用递归会简单eg累加int sum(int n) { if(n 1) { return 1; }else { return sum(i-1)i; } }递归思路倒着来逻辑 判断是否得到了递归结束的条件是返回结果否继续递推下去注意递归一次不要使用太多 //会发生段错误栈空间使用完数组作函数参数int a[10];1.数组元素做函数参数a[0]void printArray(int a[n])2.数组本身做函数参数void printArray(int a[]) //形式上可以写成数组形式形式上写成 int a[]本质上是int *aint *a定位到数组的位置要访问整个数组要在输入数组长度lenvoid printArray(int a[],int len) { int i; for(i 0;i len;i) { printf(%d ,a[i]) } }形参需要一个数组形式的参数需要一个数组长度实参printArray(a,len); //数组名可以代表数组首元素地址