[問題] 字串反轉recursive問題

看板C_and_CPP作者 (小天)時間9年前 (2014/10/30 20:50), 編輯推噓2(2020)
留言22則, 10人參與, 最新討論串1/1
char *rflip(char *str,int length) { if(*str=='\0') return str; char *temp = rflip(&str[1],--length); temp[length] = *str;//問題點 temp[length+1] = '\0';//為了最後跳離recursive結尾填上'\0'用的 return temp; } int main() { char a[4] = "abc"; char *b = rflip(a,strlen(a)); cout << b; return 0; } 以上是我自己嘗試的字串反轉,其實只是想嘗試一下沒想到就成功了 但我本來以為問題點會有問題(因為我並沒有宣告矩陣大小,temp只是一個pointer) 沒想到把它當矩陣寫卻有矩陣的效果 想請問一下為什麼這樣可以成功呢? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.112.25.105 ※ 文章網址: http://www.ptt.cc/bbs/C_and_CPP/M.1414673432.A.2F3.html

10/30 21:13, , 1F
因為 a[b] 就是 *(a+b)
10/30 21:13, 1F

10/30 22:26, , 2F
用recursive?會不會太貴了一點
10/30 22:26, 2F

10/30 22:59, , 3F
做個練習而已 看看functional languages那才真是貴
10/30 22:59, 3F

10/31 00:45, , 4F
你的程式碼根本就 memory access violation
10/31 00:45, 4F

10/31 01:14, , 5F
蠻有趣的寫法. 可惜是錯的~ a 不夠大~
10/31 01:14, 5F

10/31 01:17, , 6F
這樣 a 大概要兩倍大.
10/31 01:17, 6F

10/31 10:08, , 7F
sorry我沒有很懂各位的意思,可以跟我講解細一點嗎??
10/31 10:08, 7F

10/31 10:09, , 8F
我知道a[b]是*a+b,可是我的問題點還是有疑問...
10/31 10:09, 8F

10/31 10:10, , 9F
*(a+b)
10/31 10:10, 9F

10/31 10:14, , 10F
還有為什麼a要兩倍大? memeory access violation的地方?
10/31 10:14, 10F

10/31 12:15, , 11F
因為你是從a[3]開始寫入,而不是一開始的位置
10/31 12:15, 11F

10/31 12:15, , 12F
你把a印出來就知道了
10/31 12:15, 12F

10/31 12:55, , 13F
從來都不是空的啊!!因為你已經給它位置了
10/31 12:55, 13F

10/31 12:56, , 14F
但是不建議這樣寫,因為這樣整個程式變很亂
10/31 12:56, 14F

10/31 13:09, , 15F
temp一直是&a[3],temp+1,+2,+3就往後寫,因此需要兩倍空間
10/31 13:09, 15F

10/31 13:14, , 16F
你已知a[b]是*(a+b),就知矩陣指標可互換,那問題點的問題是?
10/31 13:14, 16F

10/31 13:36, , 17F
阿,你main最後加上cout<<a會印出abccba,這樣應該就可理解吧
10/31 13:36, 17F

10/31 18:10, , 18F
恩恩我理解了!不過a沒有宣告兩倍大卻沒有出錯讓我覺得
10/31 18:10, 18F

10/31 18:10, , 19F
很神奇
10/31 18:10, 19F

10/31 22:06, , 20F
那真的只是剛好沒事. 你要用pointer任意覆寫任何位址都可.
10/31 22:06, 20F

10/31 22:07, , 21F
會不會發生什麼事, 等發生就知道...
10/31 22:07, 21F

11/01 01:13, , 22F
等你發生一次就會學到教訓了。
11/01 01:13, 22F
文章代碼(AID): #1KKZGOBp (C_and_CPP)