看板 C_and_CPP 關於我們 聯絡資訊
書上寫著,想將陣列中的元素給同一個初值時,只要填入一個數值即可 如: int data[5]={0} //此時data中的五個元素皆設為0 我試著填入 int data[5]={31} 結果會被只有第一個元素為31,其它都是0 {31,0,0,0,0} 請問我是哪裡搞錯了嗎? -- -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 134.208.1.29
singlovesong:書寫錯了 09/23 09:36
bibo9901:只有0可以這樣 09/23 09:56
Fan383:喔喔 感謝樓上 09/23 09:58
stupid0319:好書,好書 09/23 10:11
maerdimer:哪一本阿 洪維恩嗎XD 09/23 10:41
sardine:int data[n]={0} -> data[n]=n why?? 09/23 10:47
sardine:偶然發現的 09/23 10:47
sardine:不過第n+2項(data[n+1])之後沒宣告的部份值就亂跳了 09/23 10:50
suhorng:data[n]=n 是湊巧吧, data[n] 已經超過陣列範圍了 09/23 10:52
suhorng:搞不好你看到的那個值n 就是變數n的 -..- 09/23 10:52
sardine:是阿 所以我才覺得神奇 而且n隨便取20 30都會準 09/23 10:53
suhorng:因為超出所以所以存到n的值(同位置)...程式碼改一下就錯了 09/23 10:54
suhorng:比如, 你把 n 改在全域宣告成 const int n = XXX; 09/23 10:55
sardine:可是我貼到這http://codepad.org就出問題了XD 09/23 10:55
suhorng:然後 int data[n] 開在區域 09/23 10:55
sardine:http://codepad.org/Li50WAwt 在我自己pc上跑是出現n 09/23 10:56
suhorng:在你PC上存取到i的值. 把i改成全域就爆了 09/23 10:59
suhorng:data[n]本來就是個沒宣告的地方 09/23 11:00
sardine:http://ppt.cc/VfZk 有圖為證 http://ppt.cc/YfLK 09/23 11:02
sardine:那為啥我的pc這麼特別XD Win7.. 09/23 11:02
yauhh:有很特別嗎? 09/23 11:03
sardine:我好奇的是 我的電腦怎麼會有這麼巧的輸出XD 09/23 11:03
yauhh:因為你自己把data[115]指定為115啊 09/23 11:04
yauhh:喔抱歉我看錯了 09/23 11:05
sardine:?? 有嗎 ?? 我哪邊做了這事?? 09/23 11:05
sardine:我不太理解 超出所以存取到n 的意思 09/23 11:09
yauhh:答案是,你看看在 int data[115] 之後宣告的變數是什麼. 09/23 11:12
yauhh:定址剛好把自動變數排在一起, &data[115] == &i 09/23 11:12
suhorng:不是你的電腦特殊, 我的電腦上也是這樣 09/23 11:14
yauhh:我Ubuntu寫一個也一模一樣. 09/23 11:14
suhorng:但是換種編譯器/換不同版本/換到其他作業系統可能就爆了 09/23 11:15
james732:data[10]其實就是後面的那個i變數啊…XDDD 09/23 11:15
sardine:雖然這說法可以理解 不過這算不算complier的缺失阿XD 09/23 11:16
yauhh:不是,向來都是這個樣子 09/23 11:16
bibo9901:不算啊, 你跟本不應該使用到data[n]的 09/23 11:17
james732:C語言是一個違規可以動但不保證結果的神奇語言XD 09/23 11:19
james732:聽說設計的時候是假設程式設計師很清楚自己在幹嘛 09/23 11:20
leiyan:vector<int> data(5,31) 09/23 11:36
singlovesong:stack本來就會照記憶體順序分配 不是剛好 09/23 16:13
singlovesong:如果sp 跳來跳去 反而很亂 所以james732 大是對的! 09/23 16:14
b9307025:我比較好奇的是int data[10] 不是從data[0]~data[9]嗎 09/23 16:24
b9307025:data[10]怎來的 = =" 09/23 16:25
james732:data[10]就是data+sizeof(data[0])*10 09/23 16:44