ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

使用函数交换两个指针

2021-10-30 11:00:00  阅读:113  来源: 互联网

标签:p2 p1 函数 num2 int 交换 num1 指针


这里写目录标题

传指针但没有解引用

void swap_pointer1(int *p1,int *p2){
    int *p=p1;
    p1=p2;
    p2=p;
}

调用此函数,发现值并没有被交换。
调用了swap_pointer1函数,还是没有改变它们的值,又是为什么呢?
因为当我们把num1,num2的地址传进去的时候,指针变量*p1,*p2 就保存了主函数num1,num2的地址,但是p1和p2也只是一个临时变量。虽然在子函数把地址互相交换了,在返回主函数时并不会保存,只是临时改变。

int main(int argc,char *argv[])
{
    int num1=1,num2=2;
    int *p=&num1;
    int *p1=&num2;
    swap_pointer1(p1,p);
    cout<<*p<<' '<<*p1<<endl;

    return 0;
}

传指针且解引用

void swap_pointer2(int *p1,int *p2){
    int p=*p1;
    *p1=*p2;
    *p2=p;
}

调用此函数,发现值被交换。
为啥调用swap_pointer1函数,可以改变它们的值,又是为什么呢?
因为当我们把num1,num2的地址传进去的时候,指针变量*p1,*p2 就保存了主函数num1,num2的地址,我们在子函数将p1和p2指向的对象值进行交换,也就会在主函数把他们两个指向的对象进行交换。

标签:p2,p1,函数,num2,int,交换,num1,指针
来源: https://blog.csdn.net/qq_41897304/article/details/121047749

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有