C:将指针切换到整数

C:将指针切换到整数,c,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指向它时遇到问题。您可以这样做: int temp = *a; // r

我想写一个方法,它使用两个指向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
指向它时遇到问题。

您可以这样做:

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
你是这样做的:

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

更改的代码应为:

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;
}

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

取消引用指针,这类似于返回指向的变量。因此,将值存储到解引用指针将导致该值存储到指向的内存中。因此,只要取消对两个指针的引用并专门处理数字,就不需要更改指针本身

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

实际上,因为您对函数的参数使用了按值调用,所以在“change”中交换指针中的内存地址对main中的变量没有任何影响。

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

void change(int *a, int *b) {
    int t = *a;
    *a = *b;
    *b = t;
}
实际上,因为您对函数的参数使用了按值调用,所以在“change”中交换指针中的内存地址对main中的变量没有任何影响。

in

void change(int *a, int *b) {
    int t = a;
    *a = *b;
    *b = *t;
}
难道你没有注意到
a
的类型是
int*
,而
t
的类型是
int
,所以你不能只将
a
分配给
t

void change(int *a, int *b) {
    int t = a;
    *a = *b;
    *b = *t;
}
你没有注意到
a
的类型是
int*
,而
t
的类型是
int
,所以你不能只将
a
分配给
t