关于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 01:37
对c++不熟,不过我觉得这部分很c应该相同的。

问题1:实参wallet1的地址跟传递给指针p的地址是一样的吗???
wallet1的地址和指针变量p的值是一样的,但是指针变量p本身的地址与wallet1的地址不同。临时变量wallet1的地址应该在栈上,指针变量p可能在不同的栈上或在通用寄存器Rx上。


按照小弟的理解:wallet1是存储在普通内存当中的,而指针p是存储在栈当中的,两者的地址应该是不一样的吧,只是值相同而已.那下图中p的地址该如何理解,是系统从栈上申请的临时地址?
问题2:我认为:不管形参采用的是变量,还是变量的地址,从实参传递给形参的始终是变量的值,这样理解正确吗?恳请大神指教~~~
wallet1是整型变量,p是指针变量,两者的地址不一样(如上回答),这两个变量的值也不能说相同,wallet1的值为300,p的值为wallet1的地址0x0018fc7c;
“不管形参采用的是变量,还是变量的地址,从实参传递给形参的始终是变量的值”,这句话我有点没理解,如果还是按照wallet1的例子来说的话,实参传递的还是wallet1的地址,而不是值300。


问题3:教程中被调用函数是采用{int temp; temp = *p;*p=*q:*q=temp;}来完成的.
那我现在将其改为采用传递地址,为什么实际上并没有交换wallet1和wallet2的内容呢???恳请大神指教~
你仅仅交换了“指针变量”p,q的值,p的值为wallet1的地址,q的值为wallet2的地址,当然不会让wallet1/2交换数据啦

盒子A中有苹果,盒子B中有橙子
盒子A放在桌子上,盒子B放在椅子上
现在把盒子A放到椅子上,盒子B放到桌子上
盒子A里还是苹果,盒子B中还是橙子。

有点绕。。。。我也不知道说的对不对了

一周热门 更多>