c - 使用指针交换

标签 c pointers

在下面的代码中为了在px之间进行交换和py你需要一个指针指向py的地址和px有效地交换它们。

我的问题是关于 int temppx的值放入其中它如何返回正确的值,因为没有指向它的指针能够给出正确的值以及 int temp 的地址如何?没有克隆给出错误的值?

void swap(int px, int py)
{
    int temp;
    temp = px;
    px = py;
    py = temp;
}

//pointer version

void swap(int *px, int *py)
{
    int temp;
    temp = *px;
    *px = *py;
    *py = temp;
}

最佳答案

两个函数交换int 值。但是这种交换会影响调用代码的 int 吗?

使用第二个 swap(),交换的效果可以在原始 a,b 中看到,因为该函数使用原始地址 a,b

int a = 1;
int b = 2;
swap_version2(&a, &b);
printf("%d %d\n", a, b);  // prints 2 1

使用第一个 swap() 时,交换的效果在原始 c,d看不到。因为 swap() 函数正在交换 c,d 的副本。最终效果:第一个交换功能只是浪费时间。它不会交换c,d

int c = 3;
int d = 4;
swap_version1(c, d);
printf("%d %d\n", c, d);  // prints 3 4

关于c - 使用指针交换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39372041/

相关文章:

c++ - 检测对范围外变量的访问

c++ - 如何在android项目中使用NDK?

c - 如何复制结构体指针

c++ - 指针如何将字符串作为其值?

C++ 操作模板对象

c - 通过 argv 操作进程名称和参数

c - 在 C/C++ 中执行 linux 程序并通过 stdin/stdout 与其通信的最简单方法

c - 当函数调用预处理器指令时,输出会有所不同。为什么?

c++ - 指向模板类的指针

c - 函数返回的动态数组的长度