codecamp

C++ 局部变量

现在你大概想知道我们要怎样在printMultiples和printMultTable两个函数中使用同一个变量i。我不是说过一个变量只能声明一次吗?函数改变了变量的值会不会出问题?

两个问题的答案都是“不”,因为printMultiples中的i和printMultTable中的i不是同一个变量。他们的名称相同,但不会指向同一块内存地址,因而改变其中一个值并不影响另外一个。

不要忘了函数内部声明的变量是局部的。你不能从局部变量的“宿主”函数外部访问此变量,而且你可以给多个变量起相同的名字,只要他们不在同一个函数内部。

这段程序的栈图清晰的表示出两个变量i并不占用同一块内存。他们有不同的值,改变一个并不影响另一个。

enter image description here

注意,printMultiples函数中参数n的值必须与printMultTable中i的值相同。另外,printMultiples中的i值从1增至n。图中i值为3,下一循环后将变为4。

在不同函数中使用不同变量名以避免混淆,这是个不错的主意,但重用名称也有很好的理由。例如用i、j、k命名循环变量是惯例。如果你在函数中避免使用这样的名字,仅仅因为你在别处用过了,这样你的程序将可能变得更难读。

C++ 再说封装
C++ 再说泛化
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }