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

[求助]C++中全局变量的问题

lovehug 发布于 2007-05-12 10:30, 836 次点击
void main()
{
int i,flag;
Tx.x=-11.0;
Tx.y=-53.0;
Tx.z= 1.7;
Data Node;
UpEdge=DownEdge=Tx;

database(BP);

for(Tx.normal=37;Tx.normal<38;Tx.normal++)
{
flag=Wall(Tx,BP,flag,TreeNode);

if(flag!=0)
{
for(i=0;i<flag;i++)
{
Node=TreeNode[i];
Node.normal=Intersect('S',Tx.normal,Node,UpEdge,DownEdge);
// UpEdge,DownEdge在Intersect函数内可以正确赋值;
// 但是在Reflection函数调用之前UpEdge,DownEdge却自动恢复为初始
// 默认值0;我这里UpEdge,DownEdge定义的是全局变量,为什么他们的
// 值没有随函数的调用而改变呢?
Reflection(Node,BP,TreeNode,UpEdge,DownEdge);
}
}
else
cout<<"There are no building in the ray incident direction!"<<endl;
}
}
6 回复
#2
PcrazyC2007-05-12 10:58
你这个地方只是将数值传过去,当然不会改变,除非你用指针或引用
#3
lovehug2007-05-12 11:02
UpEdge,DownEdge定义的是全局变量,全局变量在函数调用过程中值也不相应发生变化吗?
#4
PcrazyC2007-05-12 11:07

你这个地方只是传参,而不是在函数中去改变值,如果你在调用的函数中写UpEdge=1;DownEdge=2;如果形参名不是这两个的话,这个时候就改变了,改你这个地方只地将参数数值传递过去,如果函数里面没用改变全局变量的语句,而只是对形参的一些操作,是不会改变实参的值的

#5
lovehug2007-05-12 11:39
谢谢斑竹,我已经按照引用的形式把值改变了!
我还有一个问题,如果我在调用函数中形参沿用UpEdge,DownEdge的名字
即形参和实参同名,这个时候如果调用函数中形参值发生变化,相应的实
参值会随之变化吗?
#6
PcrazyC2007-05-12 12:00
还是一样的,只要不是传的地址,就不会改变,另外如果形参和全局变量名相同,在函数中会使全局变量被屏蔽
#7
lovehug2007-05-12 12:09
谢谢版主,谢谢你的耐心解答!
1