我想编写一个方法,它接受两个指向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
指向它时遇到问题。
答案 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
。