1. 函数的定义
函数(Function)是一个具有特定功能的代码块,通过函数名调用执行。函数可以接受参数并返回值,便于代码重用和模块化。
2. 函数的基本结构
一个函数的基本结构包括函数声明、函数定义和函数调用。
2.1 函数声明
函数声明也称为函数原型,用于告诉编译器函数的名称、返回类型和参数类型。
返回类型 函数名(参数类型 参数名, ...);
例如:
int add(int a, int b);
2.2 函数定义
函数定义包含函数的具体实现,包括函数体。
返回类型 函数名(参数类型 参数名, ...) {// 函数体return 返回值;
}
例如:
int add(int a, int b) {return a + b;
}
2.3 函数调用
函数调用是指在程序中使用函数名和参数来执行函数。
返回值 = 函数名(参数值, ...);
例如:
int sum = add(3, 5);
3. 函数的参数传递
3.1 值传递
在值传递中,函数接受参数的副本,对参数的修改不会影响原始数据。
void changeValue(int x) {x = 10;
}int main() {int a = 5;changeValue(a);printf("%d\n", a); // 输出5,原始数据未被修改return 0;
}
3.2 引用传递
在引用传递中,函数接受参数的地址,对参数的修改会影响原始数据。
void changeValue(int *x) {*x = 10;
}int main() {int a = 5;changeValue(&a);printf("%d\n", a); // 输出10,原始数据被修改return 0;
}
4. 函数的返回值
函数可以返回一个值,也可以不返回值。
4.1 返回值函数
返回值函数在函数定义中指定返回类型,并使用return
语句返回值。
int add(int a, int b) {return a + b;
}
4.2 无返回值函数
无返回值函数的返回类型为void
,不使用return
语句返回值。
void printMessage() {printf("Hello, World!\n");
}
5. 递归函数
递归函数是指在函数内部调用自身的函数。递归需要一个终止条件,以避免无限递归。
int factorial(int n) {if (n == 0) {return 1;} else {return n * factorial(n - 1);}
}int main() {int result = factorial(5);printf("%d\n", result); // 输出120return 0;
}
6. 函数指针
函数指针是指向函数的指针,可以通过函数指针调用函数。
#include <stdio.h>void hello() {printf("Hello, World!\n");
}int main() {void (*func_ptr)() = hello; // 声明并初始化函数指针func_ptr(); // 通过函数指针调用函数return 0;
}
7. 标准库函数
C语言提供了一些常用的标准库函数,例如:
printf
:格式化输出scanf
:格式化输入strlen
:计算字符串长度strcpy
:复制字符串strcmp
:比较字符串malloc
:动态内存分配free
:释放动态内存
8. 变量的存储类型
C语言提供了四种变量的存储类型,用于控制变量的生命周期、存储位置和作用域。
8.1 自动变量(auto)
自动变量是函数内的局部变量,默认存储类型为auto
,在函数调用时创建,函数结束时销毁。
void function() {auto int a = 10; // 自动变量printf("%d\n", a);
}
8.2 静态变量(static)
静态变量在函数内定义时,使用static
关键字,具有局部作用域,但在程序运行期间保持其值。
void function() {static int count = 0; // 静态变量count++;printf("Count: %d\n", count);
}
8.3 寄存器变量(register)
寄存器变量使用register
关键字声明,提示编译器将变量存储在CPU寄存器中,以提高访问速度,但编译器不一定会采纳这个建议。
void function() {register int counter = 0; // 寄存器变量for (int i = 0; i < 1000; i++) {counter += i;}printf("Counter: %d\n", counter);
}
8.4 外部变量(extern)
外部变量在所有函数外部定义,具有全局作用域,使用extern
关键字在其他文件中引用。
int globalVar = 100; // 外部变量void function() {extern int globalVar;printf("Global Variable: %d\n", globalVar);
}