我想编写一个方法,它需要两个指向整数的指针并更改它们指向的值。喜欢的东西:C:切换指向整数的指针
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;
}
我必须了解如何从b
为以后节省点a
副本,并给它一个问题。
我想编写一个方法,它需要两个指向整数的指针并更改它们指向的值。喜欢的东西:C:切换指向整数的指针
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;
}
我必须了解如何从b
为以后节省点a
副本,并给它一个问题。
你不喜欢这样:
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
为change
的代码应该是:
void change(int *a, int *b) {
int t = *a;
*a = *b;
*b = t;
}
注意,访问的价值,你总是有使用*X
,所以首先t
持有由a
指向的值,依此类推。
*提领指针,这就像返回指向的变量。因此,将值存储到解除引用的指针中会导致将该值存储到指向的内存中。因此,只需简单地解除引用这两个指针并仅处理这些数字,就不需要更改指针本身。
void change(int *a, int *b) {
int t = *a;
*a = *b;
*b = t;
}
事实上,因为你已经使用的call-by-值的函数的自变量交换中“变”的指针内存地址会对里面主要的变量都没有影响。
在
void change(int *a, int *b) {
int t = a;
*a = *b;
*b = *t;
}
没有你注意到a
的类型是int *
而t
的类型是int
,所以你不能只是分配给a
t
。