關於局部變量在循環里的生存法則


1.局部變量的生命周期是在一個大括號內,即一個所處塊結束。如循環體內定義的int j;

學過C++的同學都知道局部變量和全局變量的區別,局部變量的生命周期是從創建開始到所處的塊結束就被回收,而全局變量的生命周期是從創建開始到程序結束。而在最近我在學習java的時候讓我對局部變量在循環里的生命周期有了更深的了解。

正如上面所說,局部變量是直到所處的塊結束才從調用棧中把它回收。先看下面的代碼。

 

for(int i = 0;i<10;i++)
{
//....
}

 

 

上面代碼中的的整型變量i知道for循環結束之后才被調用棧回收。它經歷了10次for的運算,知道i=10的時候才退出循環,i被調用棧銷毀。

下面我們看另一個代碼

 

	for (int i = 0; i != 10; i++)
	{
		int j;
		j = i;
		cout << j << endl;
		cout << &j << endl;
	}
	return 0;

 

可以發現j在每次循環的時候都被定義了,j也是一個局部變量,開始我認為應該到for循環結束才被收回,但是不對。如果在當時沒有被收回,就會出現了10個j出現在調用棧里面,不會編譯錯誤嗎?即使編譯過了,但還是很占內存吧。因此我按照上面的代碼一步一步的調試。發現當一次for之后 ,j的值 和j的地址都不存在。同樣我用java也試了幾次。也發現同樣的。

因此我認為 for上定義的int i所處的塊是整個for循環,而int j所處的塊為一個for循環。那么int i的生命周期比int j的生命周期多10倍。這些細節平時我都是不會注意的,突然出現這么一個問題,突然深知,我的編程之路的確還有很長。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM