指向指针的指针,交换指针的值

C++通过二级指针交换指针值
博客介绍了在C++中交换指针值的方法,具体是通过二级指针来实现,并给出了相应代码及结果。

交换指针的值
法二—通过二级指针实现

代码如下:

#include<iostream>
using namespace std;

//此函数用于交换指针的值,通过二级指针实现
void swap(int **ptr1, int **ptr2)//ptr先于左边第一个*结合成为一个指针
{                               //再看它指向的对象是类型是int *类型即指针,所以它是一个指向指针的指针。
    int *temp = *ptr1;          
    *ptr1 = *ptr2;
    *ptr2 = temp;
}

int main()
{
    int val1 = 3;
    int val2 = 4;
    int *p1 = &val1;
    int *p2 = &val2;
    cout<<"交换之前: "<<endl;
    cout<<"p1 = "<<p1<<" *p1 = "<<*p1<<endl;
    cout<<"p2 = "<<p2<<" *p2 = "<<*p2<<endl;

    swap(p1, p2);

    cout<<"交换之后: "<<endl;
    cout<<"p1 = "<<p1<<" *p1 = "<<*p1<<endl;
    cout<<"p2 = "<<p2<<" *p2 = "<<*p2<<endl;

    return 0;
}

结果如下:
在这里插入图片描述

### 指针交换指向交换的区别 在C或C++中,指针交换指向交换是两个不同的概念,它们的实现方式和效果也有所不同。 #### 1. **指针交换指向** 指针交换指向是指通过操作指针本身来改变其指向的内存地址。这意味着两个指针变量的(即地址)被交换了,但并不改变这些地址所指向的内存单元的内容。 以下是通过指针交换指向的一个示例: ```cpp void swapPointers(int* &pa, int* &pb) { int* temp = pa; // 保存pa的 pa = pb; // 将pb的赋给pa pb = temp; // 将temp的赋给pb } ``` 在这个例子中,`pa` 和 `pb` 是引用参数,因此函数内部对 `pa` 和 `pb` 的修改会直接影响到调用者中的指针变量[^1]。 #### 2. **指针交换** 指针交换是指通过指针间接访问内存地址,并交换这些地址所存储的数据内容。也就是说,两个指针指向的内存单元中的数据被交换了,但指针本身的(即地址)没有变化。 以下是通过指针交换的一个示例: ```cpp void swapValues(int* a, int* b) { int temp = *a; // 保存a指向 *a = *b; // 将b指向赋给a指向的地址 *b = temp; // 将temp的赋给b指向的地址 } ``` 在这个例子中,`*a` 和 `*b` 分别表示指针 `a` 和 `b` 所指向的内存单元的内容。通过操作这些内容,实现了数据的交换[^5]。 #### 3. **代码对比** 为了更清楚地展示两者的区别,以下是一个完整的代码示例: ```cpp #include <iostream> using namespace std; // 指针交换指向 void swapPointers(int* &pa, int* &pb) { int* temp = pa; pa = pb; pb = temp; } // 指针交换 void swapValues(int* a, int* b) { int temp = *a; *a = *b; *b = temp; } int main() { int x = 10, y = 20; int* p1 = &x; int* p2 = &y; cout << "Before swapping pointers:" << endl; cout << "*p1 = " << *p1 << ", *p2 = " << *p2 << endl; swapPointers(p1, p2); cout << "After swapping pointers:" << endl; cout << "*p1 = " << *p1 << ", *p2 = " << *p2 << endl; cout << "Before swapping values:" << endl; cout << "*p1 = " << *p1 << ", *p2 = " << *p2 << endl; swapValues(p1, p2); cout << "After swapping values:" << endl; cout << "*p1 = " << *p1 << ", *p2 = " << *p2 << endl; return 0; } ``` #### 4. **运行结果分析** 假设初始为 `x = 10` 和 `y = 20`,指针 `p1` 指向 `x`,`p2` 指向 `y`。 - 在调用 `swapPointers` 后,`p1` 现在指向 `y`,`p2` 现在指向 `x`,但 `x` 和 `y` 的没有变化。 - 在调用 `swapValues` 后,`x` 和 `y` 的交换了,但 `p1` 和 `p2` 的指向没有变化。 #### 5. **总结** - **指针交换指向**:改变指针变量的(即地址),不改变指针指向的内存单元的内容。 - **指针交换**:改变指针指向的内存单元的内容,不改变指针变量的。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值