C语言函数的完整使用攻略
函数的定义
在C语言中,函数是一个独立的代码块,它可以被反复调用,使代码更加模块化和复用。函数通常由以下部分组成:
返回值类型 函数名(参数列表){
函数体
}
其中:
- 返回值类型:函数的返回值类型,可以为int、float、char、void等。
- 函数名:函数的名字,可以自定义。
- 参数列表:函数的参数,可以为0个或多个。
- 函数体:函数的实现部分,包含一组执行语句和逻辑。
例如,如下是一个计算两个数之和的函数:
int sum(int a, int b){
int result = a + b;
return result;
}
函数的调用
调用函数,意味着执行函数体中的代码。通过在程序中声明和调用函数,可以避免代码重复。函数的调用方法如下:
// 声明
返回值类型 函数名(参数列表);
// 调用
函数名(参数列表);
例如,上面的sum函数可以通过以下方式调用:
int res = sum(3, 5);
printf("3 + 5 = %d\n", res); // 输出 8
函数的参数
函数可以有多个参数,参数可以是基本数据类型或者自定义类型。C语言中函数的参数传递方式有两种:
- 值传递:将实参的值传递给形参,在函数体内修改形参的值不会影响实参的值。
- 地址传递:将实参的内存地址传递给形参,在函数体内修改形参的值也会影响实参的值。
以下是一个使用值传递的函数示例,它将两个整数相加,并返回结果:
int sum(int a, int b){
int result = a + b;
return result;
}
以下是一个使用地址传递的函数示例,它将两个整数的值交换:
void swap(int *a, int *b){
int tmp = *a;
*a = *b;
*b = tmp;
}
函数的返回值
函数可以有返回值,返回值的类型可以为int、float、char等基本数据类型,也可以为自定义类型。函数通过return语句返回值,如果没有返回值,返回类型应该为void。以下是一个求绝对值的函数示例:
int abs(int x){
if (x < 0){
return -x;
}
return x;
}
以下是一个使用自定义类型的函数示例,它将两个复数相加:
struct Complex{
double real;
double imag;
};
struct Complex add(struct Complex c1, struct Complex c2){
struct Complex result;
result.real = c1.real + c2.real;
result.imag = c1.imag + c2.imag;
return result;
}
示例1
以下是一个求阶乘的函数示例:
int factorial(int n){
if (n < 0){
return -1;
}
int result = 1;
for (int i = 1; i <= n; i++){
result *= i;
}
return result;
}
在主函数中调用该函数,求5的阶乘:
int res = factorial(5);
printf("5! = %d\n", res); // 输出120
示例2
以下是一个使用地址传递的函数示例,它将两个整数的值交换:
void swap(int *a, int *b){
int tmp = *a;
*a = *b;
*b = tmp;
}
在主函数中调用该函数,交换两个整数的值:
int x = 5, y = 8;
swap(&x, &y);
printf("x = %d, y = %d\n", x, y); // 输出x=8, y=5
总结
通过使用函数,可以实现代码模块化,避免代码重复,代码更易读。函数包含声明和定义两个部分,可以有多个参数和返回值。调用函数需要使用函数名和参数列表,参数传递分为值传递和地址传递两种方式。