C语言基础学习——函数

📅 2026/7/25 9:30:20 👁️ 阅读次数 📝 编程学习
C语言基础学习——函数

函数定义:实现函数,就是把功能实现

函数调用:就是使用这个功能

计算机模型(函数功能类似):

输入----->处理----->输出


一、函数定义

类型标识符 函数名(形式参数) { 函数体 //声明部分,语句部分 }

1.类型标识符:返回值类型说明符

这个类型说明符用来规定返回值的类型的

基本类型:整型、浮点型、字符型 //注意,数组类型不能用做函数返回值类型

注意:如果带出的结果类型和返回值类型说明符不一致,最终结果以返回值类型说明符为准

2.函数名:是标识符,用来表示是哪个函数

命名规则符合标识符命名规则

3.形式参数(形参):是函数获取数据的入口,函数要处理数据,可以通过形参获得

eg:y=x+2; x就类似于形式参数

实参和形参:

1.要求类型相同,个数匹配

2.实参和形参是一一对应的---位置对应

3.不需要形参

注意:如果函数不需要传入数据可以不写形参 //不写形参或者写成void

4.函数体:实现函数功能的代码

函数定义的位置

1.写在main函数前面

2.写在main函数后面 //写在后面需要提前声明函数

函数声明:复制函数头加上分号


二、函数实现

考虑:

1.功能是否独立单一

2.健壮性 //看后期维护是否简单

3.实用性

流程:

step1:先根据功能确定函数名

step2:从 输入----->处理----->输出 这个模型出发

1.函数需要输入什么---需要哪些数据,数据类型

形参的语法

每个形参都必须指明类型和变量名

类型 变量名1,类型 变量名2,...

eg: int a,int b //注意不能写成int a,b

step3:处理数据(函数体)

eg:int r = a +b;

step4:考虑要不要带出结果

要带出结果---考虑返回值类型说明符--->带出结果的语句

eg:return 表达式;

不带出结果---返回值类型说明符 void(空类型)

eg:add函数

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)); //函数调用充当参数


嵌套调用:

eg:

isLeapYear() { } 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 *a

int *a定位到数组的位置

要访问整个数组要在输入数组长度len

void printArray(int a[],int len) { int i; for(i = 0;i < len;i++) { printf("%d ",a[i]) } }

形参:需要一个数组形式的参数,需要一个数组长度

实参:printArray(a,len); //数组名可以代表数组首元素地址