函数更改指针参数,但调用方看不到更改
Function changes pointer arguments, but calling side can't see change
我想了解指针工作的本质。并有一个简单的交换功能示例。第一个按预期工作,第二个失败。
第二个函数swap2()我看不懂。我正在成功交换地址,但在函数退出后值保持不变......
为什么?
void swap1(int *x, int *y);
void swap2(int *x, int *y);
void startSwapExample() {
int a = 10;
int b = 20;
printf("a = %i, b = %i\n", a, b);
swap1(&a,&b);
printf("a = %i, b = %i\n", a, b);
printf("\n================\n");
int c = 10;
int d = 20;
printf("c = %i, d = %i\n", c, d);
swap2(&c,&d);
printf("c = %i, d = %i\n", c, d);
}
void swap1(int *x, int *y) {
printf("x = %i, y = %i\n", *x, *y);
int temp = * x;
* x = * y;
* y = temp;
printf("x = %i, y = %i\n", *x, *y);
}
void swap2(int *x, int *y) {
printf("x = %i, y = %i\n", *x, *y);
int * temp = x;
x = y;
y = temp;
printf("x = %i, y = %i\n", *x, *y);
}
程序的输出:
a = 10, b = 20
x = 10, y = 20
x = 20, y = 10
a = 20, b = 10
================
c = 10, d = 20
x = 10, y = 20
x = 20, y = 10
c = 10, d = 20
Process finished with exit code 0
在 swap2 中,您正在交换指针 x 和 y,两者都只存在于 swap2 函数的范围内。
当函数 returns 时,指针 x 和 y 不再存在,您对指针(与指针指向的值相反)所做的任何操作都无效。
swap2() 函数没有按照您的预期运行,原因如下。
void swap2(int *x, int *y) {
printf("x = %i, y = %i\n", *x, *y);
int * temp = x;
x = y;// x holding y
y = temp;// y holding x but not in main() function, only in swap2()
printf("x = %i, y = %i\n", *x, *y); // here you are getting expected output but not in main() function
}
在 swap2() 函数中,它正在交换,但修改不会影响 main() 函数,因为 temp 以及 x 和 y 都是本地指针,并且您没有取消引用任何东西,所以在 main() 中它将是一样的。
我想了解指针工作的本质。并有一个简单的交换功能示例。第一个按预期工作,第二个失败。 第二个函数swap2()我看不懂。我正在成功交换地址,但在函数退出后值保持不变...... 为什么?
void swap1(int *x, int *y);
void swap2(int *x, int *y);
void startSwapExample() {
int a = 10;
int b = 20;
printf("a = %i, b = %i\n", a, b);
swap1(&a,&b);
printf("a = %i, b = %i\n", a, b);
printf("\n================\n");
int c = 10;
int d = 20;
printf("c = %i, d = %i\n", c, d);
swap2(&c,&d);
printf("c = %i, d = %i\n", c, d);
}
void swap1(int *x, int *y) {
printf("x = %i, y = %i\n", *x, *y);
int temp = * x;
* x = * y;
* y = temp;
printf("x = %i, y = %i\n", *x, *y);
}
void swap2(int *x, int *y) {
printf("x = %i, y = %i\n", *x, *y);
int * temp = x;
x = y;
y = temp;
printf("x = %i, y = %i\n", *x, *y);
}
程序的输出:
a = 10, b = 20
x = 10, y = 20
x = 20, y = 10
a = 20, b = 10
================
c = 10, d = 20
x = 10, y = 20
x = 20, y = 10
c = 10, d = 20
Process finished with exit code 0
在 swap2 中,您正在交换指针 x 和 y,两者都只存在于 swap2 函数的范围内。
当函数 returns 时,指针 x 和 y 不再存在,您对指针(与指针指向的值相反)所做的任何操作都无效。
swap2() 函数没有按照您的预期运行,原因如下。
void swap2(int *x, int *y) {
printf("x = %i, y = %i\n", *x, *y);
int * temp = x;
x = y;// x holding y
y = temp;// y holding x but not in main() function, only in swap2()
printf("x = %i, y = %i\n", *x, *y); // here you are getting expected output but not in main() function
}
在 swap2() 函数中,它正在交换,但修改不会影响 main() 函数,因为 temp 以及 x 和 y 都是本地指针,并且您没有取消引用任何东西,所以在 main() 中它将是一样的。