关于两个数交换的问题。
为什么用交换地址的方法就改变不了在main函数里的值呢?而使用间接运算符的就可以。代码(交换地址版)
#include <stdio.h>
void swap(int *x, int *y)
{
int *t = x;
x = y;
y = t;
printf("交换中:\n");
printf("x = %d, x = %p\n",*x, x);
printf("y = %d, y = %p\n",*y, y);
}
int main()
{
int x = 3;
int y = 5;
printf("交换前:\n");
printf("x = %d, &x = %p\n",x, &x);
printf("y = %d, &y = %p\n",y, &y);
swap(&x,&y);
printf("交换后:\n");
printf("x = %d, &x = %p\n",x, &x);
printf("y = %d, &y = %p\n",y, &y);
return 0;
}
代码(间接运算符)
#include <stdio.h>
void swap(int *x, int *y)
{
int t = *x;
*x = *y;
*y = t;
printf("交换中:\n");
printf("x = %d, x = %p\n",*x, x);
printf("y = %d, y = %p\n",*y, y);
}
int main()
{
int x = 3;
int y = 5;
printf("交换前:\n");
printf("x = %d, &x = %p\n",x, &x);
printf("y = %d, &y = %p\n",y, &y);
swap(&x,&y);
printf("交换后:\n");
printf("x = %d, &x = %p\n",x, &x);
printf("y = %d, &y = %p\n",y, &y);
return 0;
}
int *x,int *y 同样是两个临时变量,你把他们两个交换有什么意义呢,也没有改变内容 本帖最后由 bin554385863 于 2019-6-10 19:49 编辑
#include <stdio.h>
void swap(int *x, int *y)
{
int *t = x;
x = y;
y = t;//这里x是指针,你用*t = x相当于二级指针,t和x都是指针他们的值都是地址,x=y y=t,你用地址交换地址是什么鬼?,你改变的是指针指向的地址,然而内存地址是不可改变的
printf("交换中:\n");
printf("x = %d, x = %p\n",*x, x);
printf("y = %d, y = %p\n",*y, y);
}
int main()
{
int x = 3;
int y = 5;
printf("交换前:\n");
printf("x = %d, &x = %p\n",x, &x);
printf("y = %d, &y = %p\n",y, &y);
swap(&x,&y);
printf("交换后:\n");
printf("x = %d, &x = %p\n",x, &x);
printf("y = %d, &y = %p\n",y, &y);
return 0;
}
1、指针交换的是地址,地址里的内容没有变。想象一下,x,y是两座房子,x房子住着a,坐落于村东头;y房子住着b坐落于村西头。交换地址相当于x,y两座房子交换了地址,也就是a和他的房子x搬到村西头;b和他的房子y搬到村东头(人在房子里,房子和人同时搬的),所以你去x房子,找到的还是a,去y房子找到的还是b,不论房子搬去哪里,里面住的人都没变。
2、间接运算符,交换的是地址里的内容(房子里的人),所以交换后,你去x房子找到了b,去y房子,找到了a。 本帖最后由 1809228982 于 2019-6-11 08:28 编辑
菜鸟小乔 发表于 2019-6-10 23:07
1、指针交换的是地址,地址里的内容没有变。想象一下,x,y是两座房子,x房子住着a,坐落于村东头;y房子住着 ...
可以使用异或{:5_91:} 1809228982 发表于 2019-6-11 08:27
main函数里面的x yaswp函数里面的,x y是两个不同的变量,只是你把它们的名字取成一样的了,你可以打印它们的地址是不一样的,所以你交换awsp函数里面的xy的值对main函数里面的x y是没有影响的,还有能交换的只有变量里面的值,变量本身的地址是不能交换的,也就是你说不可能让x的地址变成y的地址的 本帖最后由 1809228982 于 2019-6-12 10:14 编辑
lh1996 发表于 2019-6-11 11:01
可以使用异或
怎么用呢?可以写出来给我看看吗? wjp 发表于 2019-6-11 13:03
main函数里面的x yaswp函数里面的,x y是两个不同的变量,只是你把它们的名字取成一样的了,你可以打印 ...
噢,临时变量,我忘记是形参了{:10_266:}
页:
[1]