小弟迷惑中。。一个简单的传参问题
void swap(int* p,int* t)
{
int* temp=p;
p=t;
t=temp;
}
int main()
{
int i=3,j=8;
int* pp=&i;
int* tt=&j;
swap(pp,tt);
cout<<*pp<<endl
<<*tt<<endl;
}
为什么函数里面交换指针的地址,这样传进去,没有实现交换呢。
[解决办法]
刚开始 pp指针 指向 i,tt指针指向 j
传参后,p指针也指向 i, t指针也指向 j;
交换后: p指针指向 j, t指针指向了 i;
最后输出的 是cout<<*pp<<endl
<<*tt<<endl;
pp指针还是指向于 i吧,tt指针还是指向于 j;
[解决办法]
你这是值传递,系统会产生临时变量来接收你传递的值,你在函数体里的对形参的改变,就是对临时变量的改变,对你的实参一点影响都没有,当然没有办法实现交换!
[解决办法]
直接交换地直是不管用的,一楼的写法是正确的。原因是按指针传值时,其指针还是按值传递的,也就是实参的本身地址的值与形参本身地址的值是不一样的,但指向的值是一样的,可能你有些晕了,这个地方是很容易弄混淆的,你好好理解吧。指针本身是放在栈中的,32位机器上占4个字节,他指向的值一般存在堆中。