c - 函数更改指针参数,但调用方看不到更改

标签 c pointers swap

我想了解指针工作的本质。并有一个交换功能的简单示例。第一个按预期工作,第二个失败。 我无法理解第二个函数 swap2()。我成功交换了地址,但在函数退出后,值保持不变...... 为什么?

void swap1(int *x, int *y);
void swap2(int *x, int *y);

void startSwapExample() {
    int a = 10;
    int b = 20;
    printf("a = %i, b = %i\n", a, b);
    swap1(&a,&b);
    printf("a = %i, b = %i\n", a, b);

    printf("\n================\n");

    int c = 10;
    int d = 20;
    printf("c = %i, d = %i\n", c, d);
    swap2(&c,&d);
    printf("c = %i, d = %i\n", c, d);
}

void swap1(int *x, int *y) {
    printf("x = %i, y = %i\n", *x, *y);
    int temp = * x;
    * x = * y;
    * y = temp;
    printf("x = %i, y = %i\n", *x, *y);
}

void swap2(int *x, int *y) {
    printf("x = %i, y = %i\n", *x, *y);
    int * temp = x;
    x = y;
    y = temp;
    printf("x = %i, y = %i\n", *x, *y);
}

程序的输出:

a = 10, b = 20
x = 10, y = 20
x = 20, y = 10
a = 20, b = 10

================
c = 10, d = 20
x = 10, y = 20
x = 20, y = 10
c = 10, d = 20

Process finished with exit code 0

最佳答案

在 swap2 中,您正在交换指针 x 和 y,这两个指针都只存在于 swap2 函数的范围内。

当函数返回时,指针 x 和 y 不再存在,并且您对指针(而不是指针指向的值)执行的任何操作都无效。

关于c - 函数更改指针参数,但调用方看不到更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47247162/

相关文章:

使用蒙特卡洛方法计算 PI 给出的答案不精确

c - 在 qsort() 的比较函数中使用结构体中的值 - C99 - 取消引用指向不完整类型的指针

c - 该程序会给出任何错误(运行时错误)吗?

C++ - 自定义类型的交换功能不起作用

c++ - 中途反转/交换

c - 在 C 中编写 while 循环

c++ - ImageMagick 使用我的真实字体 (Magick++) 转换 SVG

c - 从 C 中的帧中提取错误的数据?

c - 为什么我不能在 C 中使用 `&&a`?

python - 删除列表中 2 个重复的交换子列表