📅  最后修改于: 2023-12-03 14:39:37.583000             🧑  作者: Mango
在 C 和 C++ 编程中,参数传递是一种重要的概念。参数传递用于将数据从一个函数传递到另一个函数,以实现代码的重用、模块化与灵活性。本文将介绍 C 和 C++ 中常见的参数传递技术。
值传递是参数传递的一种基本形式。在值传递中,函数的形参会在调用时被实参复制一份,而函数内部对形参的修改不会影响实参。
void swap(int a, int b) {
int temp = a;
a = b;
b = temp;
}
int main() {
int x = 10;
int y = 20;
swap(x, y);
// 输出仍为 10 和 20,因为 swap 中的修改不影响 main 函数中的实参
printf("x = %d, y = %d\n", x, y);
return 0;
}
引用传递允许函数直接修改实参的值。在函数的参数列表中使用引用来传递参数,函数内部对形参的修改会直接影响实参。
void swap(int& a, int& b) {
int temp = a;
a = b;
b = temp;
}
int main() {
int x = 10;
int y = 20;
swap(x, y);
// 输出为 20 和 10,因为 swap 中的修改影响了 main 函数中的实参
printf("x = %d, y = %d\n", x, y);
return 0;
}
指针传递是将参数的地址传递给函数,通过指针可以在函数内部修改实参的值。指针传递与引用传递类似,但需要在函数内使用指针解引用来访问或修改实参。
void swap(int* a, int* b) {
int temp = *a;
*a = *b;
*b = temp;
}
int main() {
int x = 10;
int y = 20;
swap(&x, &y);
// 输出为 20 和 10,因为 swap 中的修改影响了 main 函数中的实参
printf("x = %d, y = %d\n", x, y);
return 0;
}
当传递数组作为参数时,实际传递的是数组的首地址。在函数内部,可以通过指针访问数组的元素并对其进行修改。
void incrementArray(int arr[], int size) {
for (int i = 0; i < size; i++) {
arr[i] += 1;
}
}
int main() {
int arr[] = {1, 2, 3, 4, 5};
int size = sizeof(arr) / sizeof(arr[0]);
incrementArray(arr, size);
// 输出为 2, 3, 4, 5, 6
for (int i = 0; i < size; i++) {
printf("%d ", arr[i]);
}
return 0;
}
以上是 C 和 C++ 中常见的参数传递技术,根据不同的需求选择适合的传递方式可以有效提高代码的可读性与可维护性。