当前位置:   article > 正文

(图解) 指针交换两个变量的值 swap C语言入门_交换指针p1,p2所指向的变量

交换指针p1,p2所指向的变量

欢迎关注笔者,你的支持是持续更博的最大动力

问题描述

交换两个变量的值。

举例: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;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

函数的形参,是实参的拷贝,即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;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

输出结果: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;
  • 1
  • 2
  • 3
  • 4

输出:

&m: 0x7ffeefbff518 &n: 0x7ffeefbff514
&a: 0x7ffeefbff4ec &b: 0x7ffeefbff4e8

会发现,a的地址和m的地址并不一样,b和n同理。所以交换a、b占有的内存空间的值,并不会影响m、n占有的内存空间的值。图解如下:
在这里插入图片描述
可以看到,不论a、b怎么变,m和n都没有被影响。

综上,变量的修改,需要通过获取地址值,才能修改变量对应内存空间里的内容。

相关内容

其他

日常vlog: 点这里去B站~


声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/代码探索者/article/detail/63007
推荐阅读
相关标签
  

闽ICP备14008679号