回 帖 发 新 帖 刷新版面

主题:[讨论]内容很短,求大神解决!!!

#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个回复)

沙发

int *c;
c=A,A=B,B=c;

这段代码只是交换了A和B,但你需要交换的其实是*A和*B。
改成这样:
int c;
c=*A; *A=*B; *B=c;

板凳

#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 楼

主程式中只是把两个变量的地址放入另外两个变量中,调用函式时:
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 楼


我交换的是A,B. a,b的值并未交换,所以交换后*A=b,*B=a。这理论上是可以的啊
你说的是实际上是将a,b的值进行交换,而*A=a,*B=b这确实可以。
但我就是不明白我说的第一种理论可以,但实际却不行,大神能解释吗?

5 楼


void的函数不是没有返回值的吗?

6 楼

这样解释还不懂。。。。回去好好看书吧

7 楼


哥哥,这个是函数呀。主函数中A,B的地址还是原来的地址呀。引用的函数中A、B的地址只在那个函数中变,主函数中还是原来的地址。

8 楼

他是想用指针来交换数值的

我来回复

您尚未登录,请登录后再回复。点此登录或注册