作者Bright (璀璨的代價)
站內C_and_CPP
標題Re: [問題] 新手宣告變數的疑惑
時間Wed Apr 29 19:41:43 2015
※ 引述《ny397789 (bi)》之銘言:
: 開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
: C
: 問題(Questio
: 我是一個C 語言的初學者,沒有一點底子
: 我的問題感覺有點基本.....(書上寫的有點不懂...)
: 就是,假使我設
: int num,s
: s=100
: num=s+1
: num=s+2
: 為什麼num 可以 等於2個常數呢??
: 我的想法是:宣告一個變數,然後編譯器會給一個空間(4byte) 再寫入常數(s+1)
: 那還有一個s+2 寫在哪??(空間內已經是s +1)
: 如果是在一個變數,那總共會變成8byte嘛??
: 如果這樣的話,不就從頭到尾都用同一個變數就好...?
: 理解力有點差,請各位見諒
int num,s // 宣告 sum與s為int變數
s=100 // 變數s=100
num=s+1 // 變數num=100+1 所以num=101
num=s+2 // 變數num=100+2 所以num=102
其實就是變數的值被覆蓋而已
要以空間來看的話
int num,s
宣告變數。給sum跟s變數各4Byte的空間
num s
┌───┐ ┌───┐
│ 值=? │ │ 值=? │
└───┘ └───┘
4Byte 4Byte
要注意的是:
這時候兩個空間都不知道裝了什麼東西,編譯器不會幫你清空空間
需要使用運算或輸出的話,請給個初值之後再使用,不然你不知道會跑出什麼鬼東西
s=100
把100這個值放到變數s裡面
num s
┌───┐ ┌───┐
│ 值=? │ │值=100│
└───┘ └───┘
4Byte 4Byte
num=s+1
把s+1的值放到num裡面 (不管他裡面原本是什麼值,直接取代掉)
所以num=100+1 num=101
num s
┌───┐ ┌───┐
│值=101│ │值=100│
└───┘ └───┘
4Byte 4Byte
num=s+2
把s+2的值放到num裡面 (同上)
num s
┌───┐ ┌───┐
│值=102│ │值=100│
└───┘ └───┘
4Byte 4Byte
---------------
在沒有迴圈的情況下,被取代掉的值就像是變了心的女友,回不去了
女友的心裡面不會有同時住著兩個人這回事
女友的心永遠能裝下的就只有一個人,不會變大不會變小
當然,如果她是陣列的話,就可以裝好多工具人了QQ
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.165.0.163
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1430307707.A.20A.html
※ 編輯: Bright (1.165.0.163), 04/29/2015 19:48:10
推 Jimmy0301: 推 04/29 19:57
推 ny397789: 謝謝 04/29 20:14
推 s1000: XD 04/29 23:53
推 jaid: ...QQ 04/30 15:43
推 pili100: 推 04/30 21:27
推 firejox: XDDDD 05/01 23:54
推 eternal0123: 含淚推 05/02 15:10
→ dirkc: 通常全域以及靜態整數會自動初始化為零,不過自行指定是好的 05/03 11:52