[問題]陣列賦值的問題

看板C_and_CPP作者 (Fan)時間11年前 (2012/09/23 09:12), 編輯推噓3(3040)
留言43則, 11人參與, 最新討論串1/2 (看更多)
書上寫著,想將陣列中的元素給同一個初值時,只要填入一個數值即可 如: int data[5]={0} //此時data中的五個元素皆設為0 我試著填入 int data[5]={31} 結果會被只有第一個元素為31,其它都是0 {31,0,0,0,0} 請問我是哪裡搞錯了嗎? -- -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 134.208.1.29

09/23 09:36, , 1F
書寫錯了
09/23 09:36, 1F

09/23 09:56, , 2F
只有0可以這樣
09/23 09:56, 2F

09/23 09:58, , 3F
喔喔 感謝樓上
09/23 09:58, 3F

09/23 10:11, , 4F
好書,好書
09/23 10:11, 4F

09/23 10:41, , 5F
哪一本阿 洪維恩嗎XD
09/23 10:41, 5F

09/23 10:47, , 6F
int data[n]={0} -> data[n]=n why??
09/23 10:47, 6F

09/23 10:47, , 7F
偶然發現的
09/23 10:47, 7F

09/23 10:50, , 8F
不過第n+2項(data[n+1])之後沒宣告的部份值就亂跳了
09/23 10:50, 8F

09/23 10:52, , 9F
data[n]=n 是湊巧吧, data[n] 已經超過陣列範圍了
09/23 10:52, 9F

09/23 10:52, , 10F
搞不好你看到的那個值n 就是變數n的 -..-
09/23 10:52, 10F

09/23 10:53, , 11F
是阿 所以我才覺得神奇 而且n隨便取20 30都會準
09/23 10:53, 11F

09/23 10:54, , 12F
因為超出所以所以存到n的值(同位置)...程式碼改一下就錯了
09/23 10:54, 12F

09/23 10:55, , 13F
比如, 你把 n 改在全域宣告成 const int n = XXX;
09/23 10:55, 13F

09/23 10:55, , 14F
可是我貼到這http://codepad.org就出問題了XD
09/23 10:55, 14F

09/23 10:55, , 15F
然後 int data[n] 開在區域
09/23 10:55, 15F

09/23 10:56, , 16F
http://codepad.org/Li50WAwt 在我自己pc上跑是出現n
09/23 10:56, 16F

09/23 10:59, , 17F
在你PC上存取到i的值. 把i改成全域就爆了
09/23 10:59, 17F

09/23 11:00, , 18F
data[n]本來就是個沒宣告的地方
09/23 11:00, 18F

09/23 11:02, , 19F
09/23 11:02, 19F

09/23 11:02, , 20F
那為啥我的pc這麼特別XD Win7..
09/23 11:02, 20F

09/23 11:03, , 21F
有很特別嗎?
09/23 11:03, 21F

09/23 11:03, , 22F
我好奇的是 我的電腦怎麼會有這麼巧的輸出XD
09/23 11:03, 22F

09/23 11:04, , 23F
因為你自己把data[115]指定為115啊
09/23 11:04, 23F

09/23 11:05, , 24F
喔抱歉我看錯了
09/23 11:05, 24F

09/23 11:05, , 25F
?? 有嗎 ?? 我哪邊做了這事??
09/23 11:05, 25F

09/23 11:09, , 26F
我不太理解 超出所以存取到n 的意思
09/23 11:09, 26F

09/23 11:12, , 27F
答案是,你看看在 int data[115] 之後宣告的變數是什麼.
09/23 11:12, 27F

09/23 11:12, , 28F
定址剛好把自動變數排在一起, &data[115] == &i
09/23 11:12, 28F

09/23 11:14, , 29F
不是你的電腦特殊, 我的電腦上也是這樣
09/23 11:14, 29F

09/23 11:14, , 30F
我Ubuntu寫一個也一模一樣.
09/23 11:14, 30F

09/23 11:15, , 31F
但是換種編譯器/換不同版本/換到其他作業系統可能就爆了
09/23 11:15, 31F

09/23 11:15, , 32F
data[10]其實就是後面的那個i變數啊…XDDD
09/23 11:15, 32F

09/23 11:16, , 33F
雖然這說法可以理解 不過這算不算complier的缺失阿XD
09/23 11:16, 33F

09/23 11:16, , 34F
不是,向來都是這個樣子
09/23 11:16, 34F

09/23 11:17, , 35F
不算啊, 你跟本不應該使用到data[n]的
09/23 11:17, 35F

09/23 11:19, , 36F
C語言是一個違規可以動但不保證結果的神奇語言XD
09/23 11:19, 36F

09/23 11:20, , 37F
聽說設計的時候是假設程式設計師很清楚自己在幹嘛
09/23 11:20, 37F

09/23 11:36, , 38F
vector<int> data(5,31)
09/23 11:36, 38F

09/23 16:13, , 39F
stack本來就會照記憶體順序分配 不是剛好
09/23 16:13, 39F

09/23 16:14, , 40F
如果sp 跳來跳去 反而很亂 所以james732 大是對的!
09/23 16:14, 40F

09/23 16:24, , 41F
我比較好奇的是int data[10] 不是從data[0]~data[9]嗎
09/23 16:24, 41F

09/23 16:25, , 42F
data[10]怎來的 = ="
09/23 16:25, 42F

09/23 16:44, , 43F
data[10]就是data+sizeof(data[0])*10
09/23 16:44, 43F
文章代碼(AID): #1GNc8BWd (C_and_CPP)
文章代碼(AID): #1GNc8BWd (C_and_CPP)