赞
踩
欢迎关注笔者,你的支持是持续更博的最大动力
交换两个变量的值。
举例:m=3, n=4
交换后:m=4, n=3
交换两个变量的值,也就是交换两块内存区域中储存的值。
而通过指针,能够对该指针指向对内存区域进行读写。
//定义交换函数,形参为两个指向变量地址值的指针
void Swap(int * p1, int * p2){ //p1,p2是指针,类型:int *; *p1类型:int
int tmp = *p1; //p1指向的变量的值,赋值给tempt
*p1 = *p2; //p2指向的变量的值,赋值给p1指向的变量
*p2 = tmp; //temp的值,赋值给p2指向的变量
}
int main(){
int m = 3, n = 4;
Swap(&m, &n); //&取地址运算符,使得p1指向m的地址,p2指向n的地址,然后用swap函数将m和n地址储存的值互换
cout << m <<" " << n << endl; //输出4 3
return 0;
}
函数的形参,是实参的拷贝,即p1的内容是&m的一个拷贝,是m的地址值(房间号),p1就会指向m的地址,同理p2指向n。
Swap函数是把p1和p2指向的内容互换,于是m的值和n的值就互换了。图解如下:
如果不使用地址值进行交换的话,会怎么样呢?
代码如下:
void Swap(int a, int b){ //交换两变量的值
int tmp = a;
a = b;
b = tmp;
}
int main(){
int m = 3, n = 4;
Swap(m, n); //调用swap函数
cout << m <<" " << n << endl; //输出3 4
return 0;
}
输出结果:3 4
依然是m和n的原始值 。为什么swap交换了两个变量的值,但m和n没有变呢?
因为,swap交换的其实是a、b的值:
由于函数的形参,是实参的拷贝,代码Swap(m, n)实际上是将m的值拷贝给变量a,n的值拷贝给变量b,然后交换a、b的值,然而这并不会影响m、n。
如果在代码中加入:
//main函数中加入:
cout << "&m: " << &m << " &n: " << &n << endl;
//swap函数中加入:
cout << "&a: " << &a << " &b: " << &b << endl;
输出:
&m: 0x7ffeefbff518 &n: 0x7ffeefbff514
&a: 0x7ffeefbff4ec &b: 0x7ffeefbff4e8
会发现,a的地址和m的地址并不一样,b和n同理。所以交换a、b占有的内存空间的值,并不会影响m、n占有的内存空间的值。图解如下:
可以看到,不论a、b怎么变,m和n都没有被影响。
综上,变量的修改,需要通过获取地址值,才能修改变量对应内存空间里的内容。
日常vlog: 点这里去B站~
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。