函数的形参,在使用函数时,为什么为变化?
时间:10-02
整理:3721RD
点击:
例如:
void delay(uint z)
{
uint x, y;
for(x = z; x > 0; x--)
for(y = 110; y > 0; y--);
}
我在调试时,观察X和Z的变化情况,发现z和x的值相同,然后做相同的变化。为什么形参也会发生变化?
void delay(uint z)
{
uint x, y;
for(x = z; x > 0; x--)
for(y = 110; y > 0; y--);
}
我在调试时,观察X和Z的变化情况,发现z和x的值相同,然后做相同的变化。为什么形参也会发生变化?
你可以在做一个实验,定义一个全局变量然后传参进来,同时观察全局变量和你原来检测的数值。
我把函数里面的,局部变量uint y,写成了全部变量,结果,是这样的,watch1窗口中,直接出现了y,值为0x00,x和z变化情况,还是和x的值相同,做相同的变化,而y的值,单步执行的情况下,值一直为0x00,直接run,然后stop,y的值有变化。还是没有明白为什么,z和x的值和变化情况一直相同,我的理解是,当delay(10)函数被调用后,z应该一直为0x0A,x变化。
void delay(uint z)
{
uint x, y;
for(x = z; x > 0; x--)
for(y = 110; y > 0; y--);
}
这里的uint z是形参,也就是这个函数调用的时候这个Z是临时存在栈空间上面的。我说的实验是定义个全局变量,将它传参给delay,同时你可以监测这个全局变量的值,它是不会变的。
从你描述的情况上来看,可能是x和z是一个地址的数据,有可能被编译器优化了,你查看一下变量的地址。局部变量的值在函数调用结束后会被销毁的,卡好断点。