关于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条回答
liuchang
1楼-- · 2019-07-21 16:27
聆听ianhom大神和jiutianshenjian大神细心指导,不胜感激~~~
小弟在细心揣摩下,拜读了~
ofourme
2楼-- · 2019-07-21 20:24
 精彩回答 2  元偷偷看……
jiutianshenjian
3楼-- · 2019-07-21 21:36
 精彩回答 2  元偷偷看……
xp3539989
4楼-- · 2019-07-21 22:13
成为会员这么久了,真的没发现什么大神,我知道肯定有大神,但是大神都不说话,都是些菜鸟和新手在这里自娱自乐
liuchang
5楼-- · 2019-07-22 01:19
 精彩回答 2  元偷偷看……
feiting94
6楼-- · 2019-07-22 03:16
如果你学c++比较深入的话,书中应该提到过
“值传递”和 “地址传递”的说法。
c语言只有“值传递“,就是把你的实参的值传递给形参,形参最后的结果并不会修改实参的值。 这也是 swap(int a, int b) 这种函数不起作用的原因。

但c++弥补了这种缺陷,它使用 &(引用) 这种方法 实现了 地址传递
就是相当于 实参和形参是共用内存地址,指向的是同一个数据, 只是形参是是实参的一个别名。
比如  
swap(int &a , int &b)
{
     int temp;
     temp = a;
     a = b;
     b = temp;
}

在main 函数调用这个函数就可以实现数值交换的功能。

一周热门 更多>