主题:[讨论]内容很短,求大神解决!!!
C++大神
[专家分:0] 发布于 2012-12-08 15:57:00
#include<stdio.h>
void swap(int *A,int *B)
{
int *c;
c=A,A=B,B=c;
}
void main()
{
int a,b,*A=&a,*B=&b;
printf("输入a,b\n");
scanf("%d,%d",&a,&b);
if(a<b)
swap(A,B);
printf("%d,%d\n",*A,*B);
}
上面程序我是用指针变量的调换,运行程序输入10,100.结果数据并未调换(应当输出100,10)。
当我在函数swap改为:
void swap(int *A,int *B)
{
int c;
c=*A,*A=*B,*B=c;
}
之后,输入10,100.结果发生了调换变为100,10
求大神这是为什么啊!!!!!!!!!!
回复列表 (共8个回复)
沙发
eastcowboy [专家分:25370] 发布于 2012-12-10 12:27:00
int *c;
c=A,A=B,B=c;
这段代码只是交换了A和B,但你需要交换的其实是*A和*B。
改成这样:
int c;
c=*A; *A=*B; *B=c;
板凳
wukaikailive [专家分:80] 发布于 2012-12-10 21:49:00
#include
void swap(int *A,int *B)
{
int *c;
c=A,A=B,B=c;
printf("%d,%d\n",*A,*B);
}
把swap函数加一句printf("%d,%d\n",*A,*B);后会发现数是交换了的,但是仅限于swap函数内,也就是说这是一个值传递,是单向的,你操作的的是地址,而不是地址指向的内容。所以swap函数内的变化不会传回被调函数。
3 楼
lenderfox [专家分:10] 发布于 2012-12-11 17:24:00
主程式中只是把两个变量的地址放入另外两个变量中,调用函式时:
void swap(int *A,int *B)
{
int *c;
c=A,A=B,B=c;
}
其实在该子函式中,变量A和B只是存放了a、b的地址(比如1234,1236),当执行上述代码时,A变成了1236,B变成了1234而已,但地址1234,1236的内容并未改变。所以返回时,还是和原来一样。
不知道解释的是否清楚,希望对你有所帮助[em2]
4 楼
C++大神 [专家分:0] 发布于 2012-12-12 22:46:00
我交换的是A,B. a,b的值并未交换,所以交换后*A=b,*B=a。这理论上是可以的啊
你说的是实际上是将a,b的值进行交换,而*A=a,*B=b这确实可以。
但我就是不明白我说的第一种理论可以,但实际却不行,大神能解释吗?
5 楼
C++大神 [专家分:0] 发布于 2012-12-12 22:47:00
void的函数不是没有返回值的吗?
6 楼
wukaikailive [专家分:80] 发布于 2012-12-15 18:30:00
这样解释还不懂。。。。回去好好看书吧
7 楼
吓于侠义 [专家分:0] 发布于 2012-12-28 15:45:00
哥哥,这个是函数呀。主函数中A,B的地址还是原来的地址呀。引用的函数中A、B的地址只在那个函数中变,主函数中还是原来的地址。
8 楼
smm534579241 [专家分:0] 发布于 2012-12-30 11:02:00
他是想用指针来交换数值的
我来回复