C 语言子函数的参数传递199
在 C 语言中,子函数的参数用于传递数据并实现函数间的通信。参数可以是值传递或引用传递,具体取决于参数声明时的行为。
值传递
当参数是值传递时,子函数会收到参数值的副本。这意味着对副本的任何修改不会影响原始变量。例如:```c
#include
void swap(int x, int y) {
int temp = x;
x = y;
y = temp;
}
int main() {
int a = 10;
int b = 20;
swap(a, b);
printf("a = %d, b = %d", a, b); // 输出:a = 10, b = 20
}
```
在上面的示例中,swap 函数接收两个值传递的参数 x 和 y。函数中进行的交换操作只影响参数的副本,而不影响 main 函数中的原始变量 a 和 b。
引用传递
当参数是引用传递时,子函数会收到对原始变量的直接引用。这意味着对引用变量的任何修改都会反映在原始变量中。要实现引用传递,需要在参数声明前使用 * 号。```c
#include
void swap(int *x, int *y) {
int temp = *x;
*x = *y;
*y = temp;
}
int main() {
int a = 10;
int b = 20;
swap(&a, &b);
printf("a = %d, b = %d", a, b); // 输出:a = 20, b = 10
}
```
在上面的示例中,swap 函数接收两个引用传递的参数 x 和 y。函数中进行的交换操作会直接修改 main 函数中的原始变量 a 和 b。
数组参数
在 C 语言中,数组参数总是引用传递。这意味着对数组元素的任何修改都会反映在原始数组中。例如:```c
#include
void printArray(int *arr, int len) {
for (int i = 0; i < len; i++) {
printf("%d ", arr[i]);
}
printf("");
}
int main() {
int arr[] = {1, 2, 3, 4, 5};
int len = sizeof(arr) / sizeof(arr[0]);
printArray(arr, len); // 输出:1 2 3 4 5
arr[2] = 100;
printArray(arr, len); // 输出:1 2 100 4 5
}
```
在上面的示例中,printArray 函数接收一个指向数组元素的指针和数组的长度。函数中的任何更改都会影响原始数组。
函数指针作为参数
C 语言允许将函数指针作为参数传递。这提供了函数间调用其他函数的灵活性。例如:```c
#include
void print(int x) {
printf("%d", x);
}
void callFunction(void (*func)(int)) {
func(100);
}
int main() {
callFunction(print); // 输出:100
}
```
在上面的示例中,callFunction 函数接收一个函数指针作为参数,并调用该函数。这允许在运行时动态地选择要调用的函数。
参数类型推断
C99 标准引入了参数类型推断,允许在函数声明中省略参数类型。编译器会自动从参数的表达式推断类型。例如:```c
void swap(a, b) {
int temp = a;
a = b;
b = temp;
}
int main() {
int a = 10;
int b = 20;
swap(a, b); // 等价于 swap(int a, int b)
}
```
这种方法简化了函数声明,但只适用于局部变量。对于全局变量或函数指针,仍然需要显式指定类型。
C 语言中的参数传递提供了控制函数间通信的灵活性。值传递和引用传递允许在函数调用期间共享或修改数据。数组、函数指针和类型推断提供了额外的特性,增强了代码的可扩展性和可读性。
2024-11-23
上一篇:C 语言反序输出实验报告
下一篇:如何在 C 语言中输出汉字
Java方法栈日志的艺术:从错误定位到性能优化的深度指南
https://www.shuihudhg.cn/133725.html
PHP 获取本机端口的全面指南:实践与技巧
https://www.shuihudhg.cn/133724.html
Python内置函数:从核心原理到高级应用,精通Python编程的基石
https://www.shuihudhg.cn/133723.html
Java Stream转数组:从基础到高级,掌握高性能数据转换的艺术
https://www.shuihudhg.cn/133722.html
深入解析:基于Java数组构建简易ATM机系统,从原理到代码实践
https://www.shuihudhg.cn/133721.html
热门文章
C 语言中实现正序输出
https://www.shuihudhg.cn/2788.html
c语言选择排序算法详解
https://www.shuihudhg.cn/45804.html
C 语言函数:定义与声明
https://www.shuihudhg.cn/5703.html
C语言中的开方函数:sqrt()
https://www.shuihudhg.cn/347.html
C 语言中字符串输出的全面指南
https://www.shuihudhg.cn/4366.html