关于C++指针参数调用问题,请大神指教~~~

2019-07-20 23:54发布

本帖最后由 liuchang 于 2016-1-27 22:46 编辑

[mw_shl_code=cpp,true]void swapp(int *p,int *q);
int main()
{
        using namespace std;

        int wallet1 = 300;
        int wallet2 = 350;
        swapp(&wallet1,&wallet2);
        return 0;
}
void swapp(int *p,int *q)
{
        int *temp;
        temp = p;
        p = q;
        q = temp;
}[/mw_shl_code]
问题说明:这个是小弟在看C++ plus上的例程,但是被调用函数swapp()被我修改过~
问题1:实参wallet1的地址跟传递给指针p的地址是一样的吗???
按照小弟的理解:wallet1是存储在普通内存当中的,而指针p是存储在栈当中的,两者的地址应该是不一样的吧,只是值相同而已.那下图中p的地址该如何理解,是系统从栈上申请的临时地址?
问题2:我认为:不管形参采用的是变量,还是变量的地址,从实参传递给形参的始终是变量的值,这样理解正确吗?恳请大神指教~~~
QQ截图20160127223154.png 问题3:教程中被调用函数是采用{int temp; temp = *p;*p=*q:*q=temp;}来完成的.
那我现在将其改为采用传递地址,为什么实际上并没有交换wallet1和wallet2的内容呢???恳请大神指教~



友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
13条回答
ianhom
2019-07-21 05:30
jiutianshenjian 发表于 2016-1-28 08:44
对c++不熟,不过我觉得这部分很c应该相同的。

楼上举得例子大概是这样:苹果和橙子就是wallet1和wallet2 ...

感谢回复~~

我这里是这样理解swap函数的:
调用swap(&wallet1, &wallet2)   --------->     把盒子A(&wallet1)和盒子B(&wallet2)给一个叫swap的人,让他交换盒子AB中的东西。
执行swap(int *p, int *q)               --------->    swap这个人暂时把盒子A放到桌子(p)上,把盒子B放到椅子(q)上
一般的做法:
{int temp; temp = *p;*p=*q:*q=temp;}  ------>   把桌子上盒子里的苹果(300)放到手里,把椅子上盒子的橙子(350)放到桌子的盒子里,把手里的苹果放到椅子上的盒子里,这样盒子A和盒子B的东西就交换了。

楼主的问题:
{int *temp; temp = p; p=q:q=temp;}  ------>   把盒子A从桌子上放到地上(temp),把盒子B从椅子放到桌子上,把盒子A从地上放到桌子上,这样仅仅是盒子AB在swap这个人的桌子和椅子上交换了位置,盒子AB中的东西没有交换

一周热门 更多>