LX2002 发表于 2020-8-24 17:28:48

指针与经典的交换变量问题

代码1
#include <stdio.h>
void exchange(int c, int d) {
        int temp;
        temp = c;
        c = d;
        d = temp;
}
int main(void) {
        int a=1, b=2;
        exchange(a, b);
        printf("%d %d", a, b);
        return 0;
}
这个代码是不能实现交换的,因为exchange函数执行完毕后,将c和d交换了,交换完之后对a和b不起作用了。
代码2
#include <stdio.h>
void exchange(int* c, int* d) {
        int temp;
        temp = *c;
        *c = *d;
        *d = temp;
}
int main(void) {
        int a=1, b=2;
        exchange(&a, &b);
        printf("%d %d", a, b);
        return 0;
}
那么代码2为什么就可以实现交换,同样是交换了形式参数,两者有什么区别?(我好像模模糊糊知道一点,但无法用语言表达)

sunrise085 发表于 2020-8-24 17:33:51

本帖最后由 sunrise085 于 2020-8-24 17:35 编辑

给你看个图,我之前的回答中写的。数据我没改,意思一样
第一种写法,cd 是新的变量是临时变量
第二种写法,没有新的变量,cd 就是ab

LX2002 发表于 2020-8-24 17:45:01

sunrise085 发表于 2020-8-24 17:33
给你看个图,我之前的回答中写的。数据我没改,意思一样
第一种写法,cd 是新的变量是临时变量
第二种 ...

指针其实可以理解为一种绑定
页: [1]
查看完整版本: 指针与经典的交换变量问题