盧冠綸 @ sprout 2021 C/C++ 語法班
Credit to : Leyna
Credit to : Leyna
事實上,每個變數都會有自己的生命週期。
進入正題~
在所有大括號(包括main的大括號)外面宣告
圖中的pi,就是一個全域變數,
在整個程式內都有效
這裡的pi,就是一個區域變數,
因為他是在main的大括號裡面被宣告的,
在main外面(例如length裡面)就沒辦法使用。
這裡的 i,就是屬於for迴圈的那個大括號,
因此當這個大括號結束後,i就會消失了。
那,區域變數這東西對我們能有什麼好處?
為什麼不要讓每個變數都活到永久呢?
Credit to : 盧冠綸
「偷自己程式的事,能算偷嗎?」,接連便是難懂的話,什麼「變數」,什麼「生命週期」之類,引得眾人都哄笑起來。教室裡充滿著快活的空氣。
要是每個變數都活到永久,那你的城市一旦很大...
程式啦乾!
小挑戰:猜猜看會輸出什麼呢?
在main裡面的a,和plusone裡面的a,
雖然名字一樣,但是作用範圍完全不衝突,
所以你大可以把他們當成不一樣的東西。
當你在不同大小但重複的範圍內宣告同一個名字的變數...
程式會以最新宣告(或範圍比較小的)為準
https://pt.memedroid.com/memes/detail/2811889/Use-pi-5
所以大家在使用巢狀迴圈,或是多維陣列的時候,
記得要小心變數不要重複宣告...
這是對的 這是錯的
遮蔽效應
有點像是收納盒的概念,用來分類變數。
不同的命名空間裡面可能會有相同的變數名稱。
std就是一個namespace。
指令:using namespace [命名空間名稱](如左):
功能:直接存取空間裡面的任何成員。
指令:using [命名空間名稱]::[命名空間成員](如右):
功能:直接存取空間裡面的指定成員。
為什麼之前說盡量少用using namespace std; ?
因為std裡面不只有cin和cout兩個指令而已,事實上還有其他東西存在裡面,所以直接using namespace std 有可能會導致撞名。
變數是:
生於宣告,
死於大括號結束之處。
全域變數:不在任何大括號內。
區域變數:看他出生在哪個大括號內,
就會死在大括號結束之處。
遮蔽效應:以最新宣告者為主。小心不要出bug。
大家可以在自己的電腦裡面,自己試玩看看我們剛剛說的各種變數的生命週期哦!