C++传址调用

来源:百度知道 编辑:UC知道 时间:2024/05/23 16:29:59
#include<iostream.h>
void main()
{
int a=3,b=5;
void swap(int*,int*);
swap(&a,&b);
cout<<"a="<<a<<" , b="<<b<<endl;
}
void swap(int*n1,int*n2)
{
int temp=*n1;
*n1=*n2;
*n2=temp;
}

主函数中的swap(&a,&b)是怎么实现调用的?&a,&b不是分别取a,b的地址吗?为什么到调用函数swap(int*n1,int*n2)又定义了n1和n2指针?
本人c++很烂,总是看不懂

刚刚在你另一贴里已经回答了你的提问,
这里直接贴我刚答的,希望能给我分
--------------------------
因为n1,n2只在swap()内部存在,swap()给n1,n2另外分配空间和地址,函数结束就消失了,这个一般C++的教程上对传值和传指针都有这种说明,

例:
a的地址在=&001
b的地址在=&002
n1的地址在=&003
n2的地址在=&004
n1,n2的地址本来就和a,b不同
*n1,*n2是指针直接指向a,b,对指针的修改就是对a,b的修改,所以很多C++书上都说指针功能虽然强大但要小心使用
把main()里下面的内容
void swap(int *,int *);
swap(&a,&b);
改成
void swap(int &,int &)
cout<<"a的地址="<<&a<<endl;
swap(a,b);
再把swap()函数改成
void swap(int& n1,int& n2)
{
int temp;
temp=n1;
n1=n2;
n2=temp;
count<<"n1的地址="<<&n1<<endl;
}
这个是把a,b的地址给了n1,n2,并没有给n1,n2分配空间,所以可以转换
---------
多加出的(cout<<)方便你在机子上调试查看两者地址的,你可以看下你自己的swap()里的n1的地址是不是如此

n1,n2就是用来存放地址的指针啊,你的理解是对的!