现在你大概想知道我们要怎样在printMultiples和printMultTable两个函数中使用同一个变量i。我不是说过一个变量只能声明一次吗?函数改变了变量的值会不会出问题?
两个问题的答案都是“不”,因为printMultiples中的i和printMultTable中的i不是同一个变量。他们的名称相同,但不会指向同一块内存地址,因而改变其中一个值并不影响另外一个。
不要忘了函数内部声明的变量是局部的。你不能从局部变量的“宿主”函数外部访问此变量,而且你可以给多个变量起相同的名字,只要他们不在同一个函数内部。
这段程序的栈图清晰的表示出两个变量i并不占用同一块内存。他们有不同的值,改变一个并不影响另一个。
注意,printMultiples函数中参数n的值必须与printMultTable中i的值相同。另外,printMultiples中的i值从1增至n。图中i值为3,下一循环后将变为4。
在不同函数中使用不同变量名以避免混淆,这是个不错的主意,但重用名称也有很好的理由。例如用i、j、k命名循环变量是惯例。如果你在函数中避免使用这样的名字,仅仅因为你在别处用过了,这样你的程序将可能变得更难读。