[問題] C 語言陣列用指標寫

看板C_and_CPP (C/C++)作者 (下棋逍遙遊)時間11年前 (2015/04/14 16:01), 11年前編輯推噓4(4018)
留言22則, 9人參與, 最新討論串1/1
開發平台(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

04/14 16:16, , 1F
因為 a+i 永遠也不會 == NULL
04/14 16:16, 1F

04/14 16:18, , 2F
所以要想想看怎麼寫?
04/14 16:18, 2F

04/14 16:20, , 3F
施主,這個問題應該要問你自己
04/14 16:20, 3F
沒有配置到的記憶體空間,仍然有記憶體存在, 請問沒有配置到的記憶體空間要怎樣表現呢?

04/14 16:34, , 4F
不要去想記憶體要怎麼表現, 你只需要知道array長度
04/14 16:34, 4F
請問array 長度不知道呢? ※ 編輯: chinagogoya (1.34.1.171), 04/14/2015 16:39:25

04/14 17:12, , 5F
施主,這個問題應該要問你自己
04/14 17:12, 5F

04/14 18:16, , 6F
你一直無限迴圈不就是[表現沒配置到的記憶體空間]嗎
04/14 18:16, 6F

04/14 22:29, , 7F
sizeof()
04/14 22:29, 7F
這方法不錯

04/15 18:15, , 8F
你明明知道a[5]是5個, 怎會想不出怎跳出loop
04/15 18:15, 8F
那只是假定的,我是想說把裡面當作任意未知的陣列 ※ 編輯: chinagogoya (1.34.1.171), 04/15/2015 23:47:47

04/16 00:34, , 9F
你可以思考為什麼 C 字串需要一個 '\0' 結尾
04/16 00:34, 9F

04/16 00:34, , 10F
這個 '\0' 就是在不知道長度的狀況下的變通法
04/16 00:34, 10F

04/16 01:42, , 11F
前提是字元陣列才有效
04/16 01:42, 11F

04/16 03:15, , 12F
觀念不限在字元陣列, 只是 '\0' 這玩意就要換成適當的東西
04/16 03:15, 12F

04/16 13:18, , 13F
請問哪來的未知長度陣列? 宣告一個靜態陣列, 你跟編譯器都知
04/16 13:18, 13F

04/16 13:19, , 14F
道(呼叫sizeof()取的到長度,就是因為編譯器知道),宣告動態
04/16 13:19, 14F

04/16 13:21, , 15F
陣列,也要執行期指定陣列的長度,這時把長度用另外的變數記
04/16 13:21, 15F

04/16 13:21, , 16F
下來不就好了?(就像std::vector在做的事)
04/16 13:21, 16F

04/16 13:25, , 17F
假設不是結尾有特定的定義(如字串的'\0'),又假設你不知道長
04/16 13:25, 17F

04/16 13:30, , 18F
度,那你只好自己定義條件。
04/16 13:30, 18F

04/19 00:51, , 19F
如果陣列都是存正整數,可以寫成while(*(a+i) >=0)
04/19 00:51, 19F

04/20 06:23, , 20F
使用 沒配置到的記憶體空間 是不被允許的 通常OS會去檔掉
04/20 06:23, 20F

04/20 06:24, , 21F
建議是暫時不要往這方面想 要想任意矩陣都可使用,有其它
04/20 06:24, 21F

04/20 06:24, , 22F
的方法可以實現
04/20 06:24, 22F
文章代碼(AID): #1LBCazZt (C_and_CPP)
文章代碼(AID): #1LBCazZt (C_and_CPP)