[問題]雙重 指標存取字串

作者: mp8113f (丹楓)   2016-04-04 13:47:16
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
想請問各位前輩時否有現成的案例可供小弟參考
最近也是有類似的想法正在練習不過好像沒出現問題
怕我正在走上這條看似正確的誤途上
初次在板上請教,煩請各位不吝指教
作者: stupid0319 (徵女友)   2016-04-04 13:55:00
看到char **ptr,建議你還是換本書好了
作者: kai5566 (改名Dirk_AI56)   2016-04-04 15:40:00
一樓?為什麼?
作者: stupid0319 (徵女友)   2016-04-04 16:03:00
有兩顆*就會有三顆,四顆,沒完沒了啊,無法理解的用法
作者: kai5566 (改名Dirk_AI56)   2016-04-04 16:04:00
.............這是什麼理由
作者: mp8113f (丹楓)   2016-04-04 16:04:00
我也想知道為甚麼,還是char** ptr比較簡潔明瞭呢另外問題二我想了想,是不是因為直接對*ptr做加減不保險因為不一定會有stack區塊讓他存? 所以有些人可過有些不
作者: stupid0319 (徵女友)   2016-04-04 16:15:00
我常看MSDN,可是機乎都不會出現兩顆**的指標大部分都typedef成一個類型,這樣比較清楚
作者: mp8113f (丹楓)   2016-04-04 16:17:00
那如果該宣告pointer to pointer,該怎麼寫比較專業了解我再研究這個方式看看,感謝 !不過問題二還是不太清楚....囧
作者: stupid0319 (徵女友)   2016-04-04 16:19:00
應該對pointer定義成看的懂,易理解明確的名稱指標是新手的罩門呀,其實不用想太多,把指標看成變數
作者: Bencrie   2016-04-04 16:21:00
最多就兩顆吧
作者: ko27tye (好滋好滋)   2016-04-04 21:12:00
到底為什麼會到三顆四顆 最多就兩顆阿然後char**是強調型別為char**的ptr變數char **ptr是char型別的雙重指標 兩個都可以 看你想法然後問題二 你這樣是把三個string變數記憶體位置扔給ptr存,連續的是你的ptr 但那三個本來就不一定會連續
作者: mp8113f (丹楓)   2016-04-04 21:30:00
我大致上懂了,所以若我要連續存,最好方法是我設定一個temp指標矩陣確保連續對吧?
作者: ko27tye (好滋好滋)   2016-04-04 21:33:00
不用阿...你&ptr &(ptr+1) &(ptr+2)出來會連續沒錯
作者: mp8113f (丹楓)   2016-04-04 21:34:00
沒事,我弄反了,string本身不連續所以這樣做不太保險感謝你的解說 !若要確保三個字串連續那應該開個矩陣存這三串了就不能用分開的方式存入指標
作者: ko27tye (好滋好滋)   2016-04-04 21:37:00
yes
作者: mp8113f (丹楓)   2016-04-04 21:49:00
了解,不過這題我編譯沒問題,但執行會意外錯誤,只能再找找是不是哪邊寫錯了
作者: ko27tye (好滋好滋)   2016-04-04 22:02:00
指標可以存三種東西 0、某個物件的記憶體、另一個指標你那個temp沒指東西,然後ptr又指向它 很容易出錯的
作者: mp8113f (丹楓)   2016-04-04 22:04:00
感謝k大指點,回去馬上debug
作者: Caesar08 (Caesar)   2016-04-04 22:27:00
如果你只學C,兩個*有存在必要,你不能這樣就把書丟掉但如果你用的是C++,那你就不會看到兩個*了總而言之,建議你學C++而不是C
作者: mp8113f (丹楓)   2016-04-04 22:56:00
好的,下一個階段即是要準備學c +

Links booklink

Contact Us: admin [ a t ] ucptt.com