函数的实现
·
今天学习了函数的实现、类型标识符和形式参数的含义和注意事项、函数定义的位置、以及函数为什么能一层一层调用下去。
一、函数的实现
函数通过封装特定功能的代码块实现模块化编程。定义函数需指定函数名、参数列表及函数体,调用时通过函数名和实际参数执行。“类型标识符 函数名 (形式参数)”例如:
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)