今天学习了函数的实现、类型标识符和形式参数的含义和注意事项、函数定义的位置、以及函数为什么能一层一层调用下去。

一、函数的实现

        函数通过封装特定功能的代码块实现模块化编程。定义函数需指定函数名、参数列表及函数体,调用时通过函数名和实际参数执行。“类型标识符  函数名  (形式参数)”例如:

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)

二、函数定义的位置

函数定义通常有两种位置:

  1. main函数之前。
  2. 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));
Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐