一、函数的基本定义

函数由返回值类型、函数名、参数列表和函数体组成:

返回值类型 函数名(参数列表) {
    函数体;
    return 返回值;
}

返回值类型:可以是 int、float、void(无返回值)等。

函数名:遵循标识符规则,建议见名知意(如 sum、printInfo)。

参数列表:定义输入数据的类型和名称,多个参数用逗号分隔。

函数体:包含具体的执行代码,用 {} 包裹。

示例:

int add(int a, int b) {
    return a + b;
}

二、函数的调用

通过函数名和实参列表调用函数:

int main() {
    int result = add(3, 5); // 调用函数
    printf("%d\n", result); // 输出8
    return 0;
}

实参与形参:实参的值会拷贝给形参(值传递),形参修改不影响实参。

调用顺序:若函数定义在调用之后,需提前声明函数原型。

三、函数声明

函数原型告知编译器函数的存在,格式为:

返回值类型 函数名(参数列表);

示例:

int add(int a, int b); // 声明

int main() {
    int res = add(2, 3); // 调用
    return 0;
}

int add(int a, int b) { // 定义
    return a + b;
}

四、函数的分类

  1. 无参无返回值函数:

    void printHello() {
        printf("Hello World!\n");
    }
    
  2. 有参无返回值函数:

    void printSum(int x, int y) {
        printf("%d\n", x + y);
    }
    
  3. 无参有返回值函数:

    int getRandom() {
        return rand();
    }
    
  4. 有参有返回值函数:如前文的 add 函数。

五、参数传递方式

  1. 值传递:实参值拷贝给形参,形参修改不影响实参。

    void swap(int x, int y) {
        int temp = x;
        x = y;
        y = temp; // 仅形参交换
    }
    
  2. 地址传递(指针):通过指针修改实参的值。

    void swap(int *x, int *y) {
        int temp = *x;
        *x = *y;
        *y = temp; // 实参交换
    }
    // 调用:swap(&a, &b);
    

六、函数的嵌套调用

函数内部可调用其他函数,包括自身(递归):

int max2(int a, int b) {
    return a > b ? a : b;
}

int max3(int a, int b, int c) {
    return max2(max2(a, b), c); // 嵌套调用
}

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐