函数的实现
本文总结了函数实现的关键要点:1. 函数通过"类型标识符 函数名(形式参数)"格式定义,强调类型标识符决定返回值类型,形式参数需明确类型且与实参匹配;2. 函数定义位置需注意前置声明问题;3. 函数嵌套调用依赖调用栈机制,通过栈结构管理执行流程;4. 介绍了三种函数调用方式(语句调用、表达式调用、参数调用)。特别指出数组不能作为返回值,void函数无需return等注意事项。
·
今天学习了函数的实现、类型标识符和形式参数的含义和注意事项、函数定义的位置、以及函数为什么能一层一层调用下去。
一、函数的实现
函数通过封装特定功能的代码块实现模块化编程。定义函数需指定函数名、参数列表及函数体,调用时通过函数名和实际参数执行。“类型标识符 函数名 (形式参数)”例如:
int add(int a, int b) { // 定义
return a + b;
}
int result = add(3, 5); // 调用
1.1类型标识符与形式参数
类型标识符指定函数返回值及参数的数据类型。形式参数是函数定义中的占位变量,接收调用时传递的实际参数。注意事项:
类型标识符:
- 函数返回结果与返回值类型不一致时,以返回值类型为准。
- 返回值的数据类型(基本类型都可以,但数组类型不可以作为返回值)
形式参数:
- 形式参数需明确类型,如
int x而非x。 - 形参与实参数量、类型都需匹配,否则可能隐式转换或报错。
- 不需要实参传参数时,写void,函数体也不需要写return。
- 形式参数必须写成(类型名1 变量名1,类型名2 变量名2...),不能写成(int a,b)
二、函数定义的位置
函数定义通常有两种位置:
- main函数之前。
- main函数之后,需注意函数声明(原型)前置,避免调用未定义的函数。
三、函数的嵌套调用机制
函数能逐层调用依赖调用栈(Call Stack)机制:
- 每次调用函数时,其返回地址、参数和局部变量压入栈。
- 被调函数执行完毕,栈帧弹出,控制权返回上一层。
- 栈结构确保调用顺序和上下文隔离,支持递归或多层调用。
示例:
void funcA() { funcB(); }
void funcB() { funcC(); }
void funcC() { printf("Nested calls"); }
// 调用 funcA() 会依次执行 funcB -> funcC
函数调用方式:
- 函数调用语句:例如:printf("hello world\n");
- 函数表达式:例如:a = 2 + add(1,2);
- 函数作为参数:例如:printf("ret = %d\n",add(a,b));
更多推荐


所有评论(0)