下面的两个源代码,希望实现的功能是传入一个参数0,通过三次循环,每次在循环体内加3,输出的结果赋值给一个数值显示控件。通过代码的结果,来看看隧道和移位寄存器到底有什么区别。
在循环结构的左右两边的小实心正方体表示了这条通道为隧道,对隧道点击右键后可将其替换为移位寄存器,如图二。另外,切记移位寄存器必定成对出现,否则程序会出现编译错误。
改程序编译运行后,得到的结果却迥然不同。图一的隧道程序循环执行3次后输出的结果仍未3,而图二的移位寄存器程序循环执行3次后如愿以偿的得到了9这个值,其原理在于:
a) 隧道是一个局部变量值,每次进入循环体都会被循环体外部赋予一个初始值,所以即使图一的循环执行了3次,但是每一次隧道的左入口的值都为0,在循环体内加3后,隧道的右出口值为3,即使执行N次也是这样。
b) 移位寄存器的值稍微不同,每一次在循环体内执行,每次都会把右边移位寄存器出口的值用作左边入口的值,因此执行3次以后得到了9。
正如上文提到,熟悉C/C++的同学应该会想到了,这就是我们所熟悉的局部变量和静态局部变量的区别嘛!是的,隧道相当于每次进来循环体之后把循环体外的值赋予循环体内的局部变量,所以不管循环体内执行几次,其结果也等同于只执行了一次。然而移位寄存器相当于加了static的静态局部变量,我们知道静态局部变量是不会压栈的,因此它的值会随着每次循环体的执行而往上累加。
网友评论