看板 C_and_CPP 關於我們 聯絡資訊
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
LPH66: 因為 a[b] 就是 *(a+b) 10/30 21:13
jackylu63: 用recursive?會不會太貴了一點 10/30 22:26
MOONRAKER: 做個練習而已 看看functional languages那才真是貴 10/30 22:59
littleshan: 你的程式碼根本就 memory access violation 10/31 00:45
Feis: 蠻有趣的寫法. 可惜是錯的~ a 不夠大~ 10/31 01:14
Feis: 這樣 a 大概要兩倍大. 10/31 01:17
kdok123: sorry我沒有很懂各位的意思,可以跟我講解細一點嗎?? 10/31 10:08
kdok123: 我知道a[b]是*a+b,可是我的問題點還是有疑問... 10/31 10:09
kdok123: *(a+b) 10/31 10:10
kdok123: 還有為什麼a要兩倍大? memeory access violation的地方? 10/31 10:14
Caesar08: 因為你是從a[3]開始寫入,而不是一開始的位置 10/31 12:15
Caesar08: 你把a印出來就知道了 10/31 12:15
jacky1989: 從來都不是空的啊!!因為你已經給它位置了 10/31 12:55
jacky1989: 但是不建議這樣寫,因為這樣整個程式變很亂 10/31 12:56
dirkc: temp一直是&a[3],temp+1,+2,+3就往後寫,因此需要兩倍空間 10/31 13:09
dirkc: 你已知a[b]是*(a+b),就知矩陣指標可互換,那問題點的問題是? 10/31 13:14
dirkc: 阿,你main最後加上cout<<a會印出abccba,這樣應該就可理解吧 10/31 13:36
kdok123: 恩恩我理解了!不過a沒有宣告兩倍大卻沒有出錯讓我覺得 10/31 18:10
kdok123: 很神奇 10/31 18:10
JLong: 那真的只是剛好沒事. 你要用pointer任意覆寫任何位址都可. 10/31 22:06
JLong: 會不會發生什麼事, 等發生就知道... 10/31 22:07
MOONRAKER: 等你發生一次就會學到教訓了。 11/01 01:13