看板 C_and_CPP 關於我們 聯絡資訊
http://ideone.com/UhNQlR 先附上原始程式碼 這是某本書上的範例但是照打上去於DEv編譯會出現錯誤 問題1 : 對於ptr = temp 的這行意義不是很了解 看字面上似乎想要讓ptr指標指向temp指標存取的值(指向某字串的位址) 但temp並未初始,所以這個步驟對我來說有點詭異 問題2 : 我假設問題1的步驟可能是要這樣寫 ptr = &temp 那麼我想要讓三個字串的起始位址連續存入三個記憶體位址中 於是我也寫了跟範例一樣的語法 *(ptr+0) = string1; *(ptr+1) = string2; *(ptr+2) = string3; 而我想要確認這三個位址是否真的連續接著 於是自行加上輸出 for(n=0 ; n<3 ; n++) printf("第%d個字串的位址為%p\n",n+1,*(ptr+n)); 不過1跟2的位址是連續,但第三個位址直接跳去不知道哪個地方 很明顯不連續 以至於我在加上輸出列印時就產生錯誤 for(n=0 ; n<3 ; n++) printf("第%d個字串的字串為%s\n",n+1,*(ptr+n)); 想要知道問題的點在哪邊 Orz ..毫無頭緒 問題3 : 關於置底常見錯誤的12 別想對二維陣列使用pointer to pointer 想請問各位前輩時否有現成的案例可供小弟參考 最近也是有類似的想法正在練習不過好像沒出現問題 怕我正在走上這條看似正確的誤途上 初次在板上請教,煩請各位不吝指教 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 59.126.35.91 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1459748840.A.555.html ※ 編輯: mp8113f (59.126.35.91), 04/04/2016 13:49:44 ※ 編輯: mp8113f (59.126.35.91), 04/04/2016 13:51:39
stupid0319: 看到char **ptr,建議你還是換本書好了 04/04 13:55
kai5566: 一樓?為什麼? 04/04 15:40
stupid0319: 有兩顆*就會有三顆,四顆,沒完沒了啊,無法理解的用法 04/04 16:03
kai5566: .............這是什麼理由 04/04 16:04
mp8113f: 我也想知道為甚麼,還是char** ptr比較簡潔明瞭呢 04/04 16:04
mp8113f: 另外問題二我想了想,是不是因為直接對*ptr做加減不保險 04/04 16:05
mp8113f: 因為不一定會有stack區塊讓他存? 所以有些人可過有些不 04/04 16:06
stupid0319: 我常看MSDN,可是機乎都不會出現兩顆**的指標 04/04 16:15
stupid0319: 大部分都typedef成一個類型,這樣比較清楚 04/04 16:16
mp8113f: 那如果該宣告pointer to pointer,該怎麼寫比較專業 04/04 16:17
mp8113f: 了解我再研究這個方式看看,感謝 ! 04/04 16:17
mp8113f: 不過問題二還是不太清楚....囧 04/04 16:18
stupid0319: 應該對pointer定義成看的懂,易理解明確的名稱 04/04 16:19
stupid0319: 指標是新手的罩門呀,其實不用想太多,把指標看成變數 04/04 16:20
Bencrie: 最多就兩顆吧 04/04 16:21
ko27tye: 到底為什麼會到三顆四顆 最多就兩顆阿 04/04 21:12
ko27tye: 然後char**是強調型別為char**的ptr變數 04/04 21:18
ko27tye: char **ptr是char型別的雙重指標 兩個都可以 看你想法 04/04 21:19
ko27tye: 然後問題二 你這樣是把三個string變數記憶體位置扔給 04/04 21:27
ko27tye: ptr存,連續的是你的ptr 但那三個本來就不一定會連續 04/04 21:28
mp8113f: 我大致上懂了,所以若我要連續存,最好方法是 04/04 21:30
mp8113f: 我設定一個temp指標矩陣確保連續對吧? 04/04 21:31
ko27tye: 不用阿...你&ptr &(ptr+1) &(ptr+2)出來會連續沒錯 04/04 21:33
mp8113f: 沒事,我弄反了,string本身不連續所以這樣做不太保險 04/04 21:34
mp8113f: 感謝你的解說 ! 04/04 21:35
mp8113f: 若要確保三個字串連續那應該開個矩陣存這三串了 04/04 21:37
mp8113f: 就不能用分開的方式存入指標 04/04 21:37
ko27tye: yes 04/04 21:37
mp8113f: 了解,不過這題我編譯沒問題,但執行會意外錯誤, 04/04 21:49
mp8113f: 只能再找找是不是哪邊寫錯了 04/04 21:50
ko27tye: 指標可以存三種東西 0、某個物件的記憶體、另一個指標 04/04 22:02
ko27tye: 你那個temp沒指東西,然後ptr又指向它 很容易出錯的 04/04 22:03
mp8113f: 感謝k大指點,回去馬上debug 04/04 22:04
Caesar08: 如果你只學C,兩個*有存在必要,你不能這樣就把書丟掉 04/04 22:27
Caesar08: 但如果你用的是C++,那你就不會看到兩個*了 04/04 22:28
Caesar08: 總而言之,建議你學C++而不是C 04/04 22:30
mp8113f: 好的,下一個階段即是要準備學c + 04/04 22:56