→ typepeter:第3行改為 str[0]=*(p+1) 09/22 21:25
→ typepeter:打錯了,是str[0]=*(p++) 09/22 21:30
→ typepeter:因為原來你加到的東西是指向字串的起始字元 09/22 21:31
→ typepeter:原來的字串語意等於是str[0]=(*p)++; 09/22 21:34
→ typepeter:改為str[0]=*(p++);應該就沒問題了 愛用括號包你不會錯 09/22 21:35
→ kkkmode:謝謝您的回答,可是p[1]和p[2]要如何解釋呢? 09/22 21:37
→ typepeter:事實上原來你的版本意圖把p指標加上一(p=p+1) 09/22 21:39
→ typepeter:然而你錯把(*p)=(*p)+1 所以p指標本身並沒有p=p+1 09/22 21:40
→ kkkmode:事實上會先assigh給str[0],再對p加1,這部分我沒有疑問 09/22 21:44
→ kkkmode:比較怪的是對p取index會有奇怪的結果,例:p[1],p[2]... 09/22 21:45
→ typepeter:假設各有char * a,e,i,o分別指向原始的四個字串 09/22 21:49
→ typepeter:第二行時*p == a 第三行 str[0]其實就是a本身,指回a自己 09/22 21:52
→ typepeter:第三行 (*p)變到e 09/22 21:52
→ typepeter:第四行,str[1]也就是e,改指向(e+1)也就是i 此時*(p)為i 09/22 21:55
→ typepeter: 打錯,是*((str+1)+1) 不是e+1 09/22 21:56
→ typepeter:第四行結束 str內為 { a i i o } 09/22 21:57
→ typepeter:第四行結束時, p指向str+1,也就是從e開始 09/22 21:58
→ typepeter: 指向e, (*p) == e 09/22 21:58
→ typepeter: 原本e的位置,目前是i 09/22 22:00
→ typepeter:第五行,原本i的指標改指向*(p+1)+3,就是*((str+1)+1)+3 09/22 22:02
→ typepeter:第六行,*(str+3)改指向*(p) 也就是*(str+1),就是指向i字 09/22 22:04
→ typepeter:到最後str的內容是{ a i i+3 i} 而p的內容等於{i i+3 i} 09/22 22:06
→ typepeter:因為p等於str+1 09/22 22:08
→ typepeter:大概解決....可能畫圖比較快理解 09/22 22:09
→ typepeter:另外1~8F的回答你不用理我XD 我當時理解錯誤 09/22 22:10
→ kkkmode:原來是我沒有考慮到str的內容的變化...@@ 09/22 22:15
→ kkkmode:太感謝了,這題目有陷阱... 09/22 22:16