看板 C_and_CPP 關於我們 聯絡資訊
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) C 問題(Question): int main(void) { int a[5]={0,1,2,3,4}; int i = 0; while( (a+i) != NULL ) { printf("%d ",*(a + i)); i++; if(i == 100) break; //假如跑無窮迴圈,就跳出。 } printf("\n"); system("PAUSE"); return 0; } 我的問題是我想要任意陣列去寫,想試試看將陣列改為指標, 可是我為什麼會跑無窮迴圈? -- 網誌文章(慎入):http://ppt.cc/NYed 學習,就要思考它的價值:http://ppt.cc/NQrD 電競,是必要的嗎:http://ppt.cc/3n4g 鬥棋(小說):http://ppt.cc/WPqF 殘局PK戰:http://ppt.cc/FpGm -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.34.1.171 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1428998461.A.8F7.html ※ 編輯: chinagogoya (1.34.1.171), 04/14/2015 16:01:29
MOONRAKER: 因為 a+i 永遠也不會 == NULL 04/14 16:16
chinagogoya: 所以要想想看怎麼寫? 04/14 16:18
MOONRAKER: 施主,這個問題應該要問你自己 04/14 16:20
沒有配置到的記憶體空間,仍然有記憶體存在, 請問沒有配置到的記憶體空間要怎樣表現呢?
Jockey66666: 不要去想記憶體要怎麼表現, 你只需要知道array長度 04/14 16:34
請問array 長度不知道呢? ※ 編輯: chinagogoya (1.34.1.171), 04/14/2015 16:39:25
Jockey66666: 施主,這個問題應該要問你自己 04/14 17:12
MOONRAKER: 你一直無限迴圈不就是[表現沒配置到的記憶體空間]嗎 04/14 18:16
jaid: sizeof() 04/14 22:29
這方法不錯
kwpn: 你明明知道a[5]是5個, 怎會想不出怎跳出loop 04/15 18:15
那只是假定的,我是想說把裡面當作任意未知的陣列 ※ 編輯: chinagogoya (1.34.1.171), 04/15/2015 23:47:47
LPH66: 你可以思考為什麼 C 字串需要一個 '\0' 結尾 04/16 00:34
LPH66: 這個 '\0' 就是在不知道長度的狀況下的變通法 04/16 00:34
TobyH4cker: 前提是字元陣列才有效 04/16 01:42
LPH66: 觀念不限在字元陣列, 只是 '\0' 這玩意就要換成適當的東西 04/16 03:15
kwpn: 請問哪來的未知長度陣列? 宣告一個靜態陣列, 你跟編譯器都知 04/16 13:18
kwpn: 道(呼叫sizeof()取的到長度,就是因為編譯器知道),宣告動態 04/16 13:19
kwpn: 陣列,也要執行期指定陣列的長度,這時把長度用另外的變數記 04/16 13:21
kwpn: 下來不就好了?(就像std::vector在做的事) 04/16 13:21
kwpn: 假設不是結尾有特定的定義(如字串的'\0'),又假設你不知道長 04/16 13:25
kwpn: 度,那你只好自己定義條件。 04/16 13:30
play714: 如果陣列都是存正整數,可以寫成while(*(a+i) >=0) 04/19 00:51
hakman: 使用 沒配置到的記憶體空間 是不被允許的 通常OS會去檔掉 04/20 06:23
hakman: 建議是暫時不要往這方面想 要想任意矩陣都可使用,有其它 04/20 06:24
hakman: 的方法可以實現 04/20 06:24