C语言函数基础及使用技巧
发布时间: 2024-04-09 16:15:50 阅读量: 7 订阅数: 15
# 1. 函数的基本概念
## 2.1 什么是函数
- 函数是一段封装了特定功能的代码块,可以被重复调用和执行。
- 函数可以接受输入参数,并可以返回输出结果。
- 函数的使用可以提高代码的重用性和可维护性。
## 2.2 函数的定义与声明
- 函数的定义包括函数名、参数列表、返回类型、函数体和返回语句。
- 函数声明告诉编译器函数的存在,不包含函数体,通常在文件开头或头文件中声明。
## 2.3 函数的调用与返回值
- 调用函数时,传入参数列表取得返回值。
- 函数的返回值可以是任意类型,包括基本类型、结构体、指针等。
- 使用`return`语句可以返回函数的结果。
通过以上内容,我们可以初步了解函数的基本概念和使用方法,下面将深入讨论函数参数传递的相关知识。
# 2. 函数参数传递
函数参数传递是函数调用中一个非常重要的概念,不同的传递方式会影响函数对参数的处理方式。在本章节中,我们将深入探讨传值调用、传址调用、引用传递、指针传递以及默认参数和可变参数函数的使用和区别。
### 3.1 传值调用与传址调用的区别
传值调用和传址调用是函数参数传递的两种基本方式,它们在处理参数时有着不同的机制,如下所示:
| 参数传递方式 | 处理方式 | 示例代码 |
| ------------ | -------- | -------- |
| 传值调用 | 将实际参数的值复制给形参,在函数内部对形参的修改不会影响实参的值 |
```c
#include <stdio.h>
void changeValue(int x){
x = 10;
}
int main(){
int a = 5;
changeValue(a);
printf("a = %d", a); // 输出结果为 5
return 0;
}
```
### 3.2 引用传递与指针传递
引用传递和指针传递是传址调用的两种方式,它们可以实现在函数内部对实参的修改。具体对比如下:
| 参数传递方式 | 处理方式 | 示例代码 |
| ------------ | -------- | -------- |
| 引用传递 | 将实际参数的地址传递给形参,在函数内部对形参的修改会影响实参的值 |
```c
#include <stdio.h>
void changeValueRef(int *x){
*x = 10;
}
int main(){
int a = 5;
changeValueRef(&a);
printf("a = %d", a); // 输出结果为 10
return 0;
}
```
### 3.3 默认参数与可变参数函数
在C语言中,函数不能直接设置默认参数,但可以通过函数重载的方式来实现类似的功能。另外,可变参数函数通过`stdarg.h`头文件中的宏来实现不定数量的参数传递,示例如下:
```c
#include <stdio.h>
#include <stdarg.h>
int sum(int num, ...){
va_list args;
va_start(args, num);
int sum = 0;
for (int i = 0; i < num; i++){
sum += va_arg(args, int);
}
va_end(args);
return sum;
}
int main(){
printf("Sum of 1, 2, 3 is %d\n", sum(3, 1, 2, 3)); // 输出结果为 6
printf("Sum of 1, 2, 3, 4, 5 is %d\n", sum(5, 1, 2, 3, 4, 5)); // 输出结果为 15
return 0;
}
```
以上是第二章的部分内容,通过以上示例可以更清晰地理解不同的参数传递方式在函数调用中的作用和区别。在实际应用中,根据需求选择适合的参数传递方式将有助于提高程序的效率和可维护性。
# 3. 函数的递归调用
- **3.1 传值调用与传址调用的区别**
- **传值调用(Call by Value):** 在函数调用时,将实际参数的值赋值给形式参数,函数中对形式参数的修改不会影响实际参数。
- **传址调用(Call by Reference):** 在函数调用时,将实际参数的地址赋值给形式参数,通过形式参数的修改可以直接影响到实际参数。
- **3.2 引用传递与指针传递**
- **引用传递:** 是在函数调用中,通过传递参数的引用(实际参数的别名)来实现的,函数中对引用参数的修改会影响到实际参数。
- **指针传递:** 是通过传递参数的指针(实际参数的地址)来实现的,函数中对指针参数的操作直接修改实际参数的值。
- **3.3 默认参数与可变参数函数**
- **默认参数:** 允许在定义函数时为参数指定默认值,当调用函数时省略该参数时,将使用默认值。
```c
// 默认参数示例
void printInfo(int num1, int num2 = 10) {
printf("Number 1: %d\n", num1);
printf("Number 2: %d\n", num2);
}
// 调用方式
printInfo(5); // Number 1: 5, Number 2: 10
```
- **可变参数函数:** 允许函数接受不定数
0
0