|
发表于 2019-1-16 16:04:45
|
显示全部楼层
要交换地址没有你想像的那么简单,交换地址还要多声明2个指针,且要用到指向指针的指针 (实际上还是在主函数的指针上操作,原来的x,y 的地址是不可能变的)
如:
- #include <stdio.h>
- void swap(int **x, int **y);
- void swap(int **x, int **y)
- {
- int *temp;
-
- printf("互换前 : x, y %d, %d\n", **x, **y);
-
- temp = *x;
- *x = *y;
- *y = temp;
-
- printf("互换后 : x, y %d, %d\n", **x, **y);
- }
- int main()
- {
- int x = 3, y = 5;
- int *p1, *p2;
- p1=&x;
- p2=&y;
-
- printf("互换前 : p1, p2: %d, %d\n", *p1, *p2);
- printf("互换前地址:p1, p2:%p, %p\n", p1, p2);
- swap(&p1, &p2);
- printf("互换后 : p1, p2: %d, %d\n", *p1, *p2);
- printf("互换后地址:p1, p2:%p, %p\n", p1, p2);
-
- return 0;
- }
复制代码
这段代码中,只是把2处地址的值进行交换
- void swap(int *x, int *y)
- {
- int temp;
-
- printf("互换前 : x, y %d, %d\n", *x, *y);
-
- temp = *x;
- *x = *y;
- *y = temp;
-
- printf("互换后 : x, y %d, %d\n", *x, *y);
- }
复制代码
=====================================================================================================
1,而你尝试的代码中是想交换主函数中2个变量的地址,要交换2个变量的地址是永远不可能的。只有上面说到 交换地址还要多声明2个指针,且要用到指向指针的指针
- void swap(int *x, int *y)
- {
- int *temp;
-
- printf("互换前 : x, y %d, %d\n", *x, *y);
-
- temp = x;
- x = y;
- y = temp;
-
- printf("互换后 : x, y %d, %d\n", *x, *y);
- }
复制代码
2,void swap(int *x, int *y) 这里的x, y只不过是局部变量,作用范围只在函数体
- #include <stdio.h>
- void swap(int *a, int *b);
- void swap(int *a, int *b)
- {
- int temp;
-
- printf("互换前 : a, b %d, %d\n", *a, *b);
-
- temp = *a;
- *a = *b;
- *b = temp;
-
- printf("互换后 : a, b %d, %d\n", *a, *b);
- }
- int main()
- {
- int x = 3, y = 5;
-
- printf("互换前 : x, y: %d, %d\n", x, y);
- swap(&x, &y);
- printf("互换后 : x, y: %d, %d\n", x, y);
-
- return 0;
- }
复制代码
3, 交换指针指向的地址是可以的。不过也只作用于函数体内(要想在函数体内修改函数体外部某指针里面存放的地址还得用指向指针的指针)
- #include <stdio.h>
- void swap(int *a, int *b);
- void swap(int *a, int *b)
- {
- int *temp;
-
- printf("互换前 : a, b %d, %d\n", *a, *b);
-
- temp = a;
- a = b;
- b = temp;
-
- printf("互换后 : a, b %d, %d\n", *a, *b);
- }
- int main()
- {
- int x = 3, y = 5;
-
- printf("互换前 : x, y: %d, %d\n", x, y);
- swap(&x, &y);
- printf("互换后 : x, y: %d, %d\n", x, y);
-
- return 0;
- }
复制代码
4, 3中的代码,你可以去掉函数,直接到主函数声明2个指针,然后交换指针存放的地址 但x,y 的地址是不可能改变的如:
- #include <stdio.h>
- int main()
- {
- int x = 3, y = 5;
- int *p1, *p2, *temp;
- p1=&x;
- p2=&y;
-
- printf("互换前 : x, y: %d, %d\n", x, y);
-
-
- printf("互换前 : p1, p2 %d, %d\n", *p1, *p2);
-
- temp = p1;
- p1 = p2;
- p2 = temp;
-
- printf("互换后 : p1, p2 %d, %d\n", *p1, *p2);
- printf("互换后 : x, y: %d, %d\n", x, y);
-
- return 0;
- }
复制代码
|
|