c++++ 函数的参数传递方式有三种:按值传递(传递参数的副本),按引用传递(传递参数的引用),按指针传递(传递参数的指针),按引用传递能直接修改原始变量,按指针传递也一样,按值传递则不能。
C++ 函数调用的参数传递方式
在 C++ 中,函数可以接收参数来执行特定任务。传递给函数的参数可以采用不同的方式传递,每种方式都有其优缺点。
按值传递
立即学习“C++免费学习笔记(深入)”;
在按值传递中,函数接收参数副本的副本。对参数副本所做的任何修改都只影响副本,不影响原始变量。
void swap(int a, int b) {
int temp = a;
a = b;
b = temp;
}
int main() {
int x = 10, y = 20;
swap(x, y); // 传递副本
cout << "x = " << x << ", y = " << y << endl; // 输出:x = 10, y = 20
return 0;
}
按引用传递
在按引用传递中,函数直接接收对函数参数的引用。对引用所做的任何修改都会直接反映到原始变量上。
void swap(int& a, int& b) {
int temp = a;
a = b;
b = temp;
}
int main() {
int x = 10, y = 20;
swap(x, y); // 传递引用
cout << "x = " << x << ", y = " << y << endl; // 输出:x = 20, y = 10
return 0;
}
按指针传递
在按指针传递中,函数接收参数的指针。对指针指向数据的修改会直接反映到原始变量上。
void swap(int* a, int* b) {
int temp = *a;
*a = *b;
*b = temp;
}
int main() {
int x = 10, y = 20;
swap(&x, &y); // 传递指针
cout << "x = " << x << ", y = " << y << endl; // 输出:x = 20, y = 10
return 0;
}
实战案例
使用按引用传递来交换两个链表中的元素:
struct Node {
int data;
Node* next;
};
void swap(Node*& a, Node*& b) {
Node* temp = a;
a = b;
b = temp;
}
int main() {
// 创建两个带有数据的链表
Node* head1 = new Node{1, nullptr};
head1->next = new Node{2, nullptr};
Node* head2 = new Node{3, nullptr};
head2->next = new Node{4, nullptr};
// 交换两个链表头部的引用
swap(head1, head2);
// 输出交换后的链表
Node* curr = head1;
while (curr != nullptr) {
cout << curr->data << " ";
curr = curr->next;
}
cout << endl;
curr = head2;
while (curr != nullptr) {
cout << curr->data << " ";
curr = curr->next;
}
cout << endl;
return 0;
}