c语言关于指针的例题

来源:百度知道 编辑:UC知道 时间:2024/05/30 06:02:48
#include <stdio.h>
void swap(int*,int*);
main()
{ int x=30,y=20;
swap(&x,&y);
(输出x,y的值为20、30。这是为什么呢?????)
}
void swap(int*a,int *b)
{int t;
t=*a;*a=*b;*b=t;
}

我的问题就是为什么那个输出的结果会是x等于20,y等于30呢?
不是说,形参和实参之间的传递是单向的么?为什么通过指针会改变实参的值呢???

void swap(int*,int*)函数接受的是一个指针,就算你可以理解成它拷贝了值,是,它拷贝了&x,&y到*a,*b里了,但是,你没有发现,*a其实还是指向x吗?这样一交换,不就结了吗。
举个例子。
假设x的地址为0x0069857(乱编的),然后,传递进函数的时候,它只是传值,并没有传引用,然后呢,int *a把0x0069857复制为自己的值。这样一来,还记得解引用吗?*(a)=*(0x0069857)=x,因此t=*a不是就可以翻译成t=x;
x=y;
y=t;
}
不是就交换了吗?????

因为swap这是地址传递,所以形参可以改变外部对应变量即实参的值。

要是值传递的话,就和你理解的一样了。

指针指向的内存地址的值发生交换,但指针自身指向的地址是不变的,没错啊。

指针自己的值没有变,原来指向20#的现在还是指向20#,但20#桌坐的女生已经和30#桌的换了。