注册 登录
编程论坛 C++教室

求大侠解释一道小题目!!!

maomaostyle 发布于 2010-10-11 22:34, 680 次点击
What does the following do: 下述语句输出什么?
void afunction(int *x)
{
x=new int;
*x=12;
}
int main()
{
int v=10;
afunction(&v);
cout<<v;
}

答案为什么是10啊?V
5 回复
#2
2010-10-11 22:57
两个值   你*x  改变的内容  是堆里的内存   并不是原来的v的地址了
#3
doofymark2010-10-12 03:57
因为指针的传递是单向的...所以...虽然你*x的值是12...但是这个结果不会传回到*v...所以v的值还是10不变...
你可以尝试这么写...
#include<iostream>
using namespace std;
int afunction(int *x)
{
x=new int;
*x=12;
return *x;
}

int main()
{
int v=10;
v=afunction(&v);
cout<<v;
return 0;
}
#4
maomaostyle2010-10-12 09:47
哦,理解了,谢谢 啊
#5
ciweitou1632010-10-12 14:58
程序代码:
void afunction(int *x)
{
    //x=new int;
    *x=12;
}
int main()
{
    int v=10;
    afunction(&v);
    cout<<v;
    return 0;
}


我有不同的看法:

v把地址赋给了形参 而形参 在函数中有重新 分配了地址 所以 就没改变实参
所以v的指向还是10,假如你把x=new int注释掉,v的值就改变过来了。
不知道我的观点能成立
#6
放牛娃19882010-10-12 17:10
赞成楼上
1