Bootstrap

传值与传址

场景:

编写一个函数使其具有交换两个数值的功能

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;
}

​​​​​​

  1. 传值(Value Passing):这是最常见的参数传递方式,函数接收的是变量的副本。也就是说,当函数内部对参数进行修改时,不会影响原始变量的值。例如,在C++或JavaScript中,当你将一个整数作为参数传递给函数时,实际上是复制了一个新的整数值到栈上,函数处理的是这个复制的副本。

  2. 传地址(Pass by Reference or Address):在这种模式下,函数接收的是实际变量的内存地址,而不是值。这意味着函数可以直接操作该变量,如果在函数内部改变了它,原地变量也会发生改变。C++通过引用(reference)和指针(pointer)实现传地址,如获取变量的地址,并通过操作符传递给函数。

;