m0_64249757 2021-12-26 20:28 采纳率: 66.7%
浏览 47
已结题

关于#c++#的问题,如何解决?

# include <iostream>
# include <string.h>

using namespace std;
 

int main()
{
     void swap(int *p1,int *p2);
     int a=1,b=2,*p1=&a,*p2=&b;
     swap(p1,p2);
     cout<<*p1<<endl;
    return 0;
}
void swap(int *p1,int *p2)
{
    int *temp;
    temp=p1;
    *p1=*p2;
    *p2=*temp;
}


# include <iostream>
# include <string.h>

using namespace std;
 

int main()
{
     void swap(int *p1,int *p2);
     int a=1,b=2,*p1=&a,*p2=&b;
     swap(p1,p2);
     cout<<*p1<<endl;
    return 0;
}
void swap(int *p1,int *p2)
{
    int *temp;
    temp=p1;
    p1=p2;
    p2=temp;
}


为何第一个输出结果是2,第二个输出结果是1

  • 写回答

4条回答 默认 最新

  • 关注

    第一段代码中:
    temp=p1; temp指向了p1指向的内存
    *p1=*p2; 是把p1指向的内存的数据更新成了p2内存中的数据,因为temp指向p1的内存,所以这时候
    temp指向值也已经发生了改变,temp内存的值也更新成了p2内存中的数据
    *p2=*temp这里,让p2内存的数据等于temp内存的数据,因为temp本身存的就是p2内存的数据,所以,这一句话基本没什么用
    所以,这段代码只是让p1的数据更新成了p2的数据,但是p2的数据没有更新成p1的数据。

    第二段代码中:
    交换的是地址,对main函数中p1和p2内存中的数据没有影响,所以*p1仍然是1。

    如果要实现交换,正确的写法是:

    void swap(int* p1 ,int* p2)
    {
        int temp;
        temp = *p1;
        *p1 = *p2;
        *p2 = temp;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 1月3日
  • 已采纳回答 12月26日
  • 创建了问题 12月26日