C:切换指向整数的指针

时间:2011-05-19 12:02:15

标签: c

我想编写一个方法,它接受两个指向int的指针并更改它们指向的值。类似的东西:

int main() {
    int a = 3;
    int b = 1;
    change(&a, &b);
    return 0;
}

void change(int *a, int *b) {
    int t = a;
    *a = *b;
    *b = *t;
}

我在了解如何保存a的副本并稍后从b指向它时遇到问题。

4 个答案:

答案 0 :(得分:2)

你这样做:

int temp = *a; // remember actual value "a" points to
*a = *b; // copy value "b" points to onto value "a" points to (will overwrite that value, but we have a copy in "temp")
*b = temp; // now copy value "a" originally pointed to onto value "b" points to

答案 1 :(得分:2)

change的代码应为:

void change(int *a, int *b) {
    int t = *a;
    *a = *b;
    *b = t;
}

请注意,要访问该值,您必须始终使用*X,因此首先t会保留a指向的值,依此类推。

答案 2 :(得分:1)

*取消引用指针,这就像返回指向的变量一样。因此,将值存储到解除引用的指针中将导致该值存储到指向的内存中。因此,只需取消引用两个指针并专门处理数字,就不需要自己更改指针。

void change(int *a, int *b) {
    int t = *a;
    *a = *b;
    *b = t;
}

的确,因为你已经使用了函数参数的call-by-value来交换“change”中指针中的内存地址,这对main中的变量没有任何影响。

答案 3 :(得分:0)

void change(int *a, int *b) {
    int t = a;
    *a = *b;
    *b = *t;
}

你没有注意到a的类型是int *t的类型是int,所以你不能只指定a } t