本帖最后由 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:我认为:不管形参采用的是变量,还是变量的地址,从实参传递给形参的始终是变量的值,这样理解正确吗?恳请大神指教~~~
问题3:教程中被调用函数是采用{int temp; temp = *p;*p=*q:*q=temp;}来完成的.
那我现在将其改为采用传递地址,为什么实际上并没有交换wallet1和wallet2的内容呢???恳请大神指教~
问题1:实参wallet1的地址跟传递给指针p的地址是一样的吗?
答:是相等的。
按照小弟的理解:wallet1是存储在普通内存当中的,而指针p是存储在栈当中的,两者的地址应该是不一样的吧,只是值相同而已.那下图中p的地址该如何理解,是系统从栈上申请的临时地址?
答:都是局部变量,都在栈中。
问题2:我认为:不管形参采用的是变量,还是变量的地址,从实参传递给形参的始终是变量的值,这样理解正确吗?恳请大神指教~~~
答:形参只能是变量。指针变量也是变量。变量的地址那是固定的东西,是实参。传递的什么东西一目了然,&wallet1就是传递的wallet1的地址值。
还是那句话,建议你看看郝斌C语言视频。这一块讲的还可以。
一周热门 更多>