场景:
编写一个函数使其具有交换两个数值的功能
a = 3 ; b = 5
=> a = 5; b=3
我们很容易想到这样一个代码
#include<stdio.h>
Exchange(int x, int y) {
int v = 0;
v = x;
x = y;
y = v;
}
int main() {
int a = 3;
int b = 5;
Exchange(a, b);
printf("a=%d,b=%d", a, b);
return 0;
}
然而它是错的,也就是说程序无法通过传值的方式用函数来远程修正原值。
那怎么进行修改呢:将地址传入函数中再进行修改,进行远程操作。
#include<stdio.h> Exchange(int*x, int *y) { int v = 0; v = *x; *x = *y; *y = v; } int main() { int a = 3; int b = 5; Exchange(&a, &b); printf("a=%d,b=%d", a, b); return 0; }
什么情况下传值呢,比方说计算具体的值等没有修正实参时:
#include<stdio.h>
int Add(int x, int y) {
return x + y;
}
int main() {
int a = 3;
int b = 5;
int v = Add(a, b);
printf("%d",v);
return 0;
}
传值(Value Passing):这是最常见的参数传递方式,函数接收的是变量的副本。也就是说,当函数内部对参数进行修改时,不会影响原始变量的值。例如,在C++或JavaScript中,当你将一个整数作为参数传递给函数时,实际上是复制了一个新的整数值到栈上,函数处理的是这个复制的副本。
传地址(Pass by Reference or Address):在这种模式下,函数接收的是实际变量的内存地址,而不是值。这意味着函数可以直接操作该变量,如果在函数内部改变了它,原地变量也会发生改变。C++通过引用(reference)和指针(pointer)实现传地址,如获取变量的地址,并通过操作符传递给函数。