Z
ZHANK
函数

函数定义与调用

函数声明/定义、参数传递(值传递)、返回值、函数原型

函数定义与调用

函数是 C 程序的构建块。C 是值传递语言——函数拿到的是参数的副本,不是原值。

学完本章你将: 掌握函数声明/定义、值传递、void 函数、函数原型的重要性。


函数基本结构

c
#include <stdio.h>

// 函数原型(声明)—— 告诉编译器函数存在
int add(int a, int b);

int main() {
    int result = add(3, 4);
    printf("%d\n", result);  // 7
    return 0;
}

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

值传递 —— C 的核心约定

c
void change(int x) {
    x = 100;  // 修改的是副本
}

int main() {
    int a = 10;
    change(a);
    printf("%d\n", a);  // 10 —— 没有变!
    return 0;
}

💡 C 语言永远传的是值得副本。想修改原值?传指针:

c
void change(int *p) {
    *p = 100;  // 通过指针修改原值
}

int main() {
    int a = 10;
    change(&a);
    printf("%d\n", a);  // 100
}

void 函数

c
// 无返回值的函数
void greet(char *name) {
    printf("Hello, %s!\n", name);
    // return; 可以省略
}

// 无参数的函数
void printVersion(void) {
    printf("v1.0\n");
}

函数原型的重要性

c
// ❌ 如果没有函数声明(或在调用之后定义)
int main() {
    float result = divide(10, 3);  // 编译器假设返回 int!
    return 0;
}

float divide(int a, int b) {       // 实际返回 float
    return (float)a / b;
}
// 编译可能通过,但结果错误——隐式声明返回 int

⚠️ 始终在调用前声明函数原型,或把 main 放在文件末尾。