[問題] char array, *str++與*&str的問題

看板C_and_CPP (C/C++)作者 (兄弟霸業)時間15年前 (2010/09/04 11:58), 編輯推噓0(0012)
留言12則, 2人參與, 最新討論串1/1
最近一直在寫些字串的函式 一堆問題 囧rz 目的是要切字串 ex: input string: Hello, I am C++. output: Hello, I am C++. 在main中一直呼叫 get_token(str, token)這個函式,直到切完。 流程應該是 1st call之後: str = I am C++. token = Hello, 2nd call之後: str = am C++. token = I 3rd call之後: str = C++. token = am 4rd call之後: str = 空字串 token = C++. void get_token(char * &str, char *token) { int idx = 0; while(*str && (*str != ' ' && *str != '\t' && *str != '\n') ) token[idx++] = *str++; token[idx] = '\0'; while(*str &&(*str == ' ' || *str == '\t' || *str == '\n') ) *str++; } 問題在一開始的 "void get_token(char * &str, char *token)" 寫成"void get_token(char *str, char *token)"就不能work 想請問是為什麼? 然後也想請問要如何解釋 char * &str -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.113.96.70

09/04 12:04, , 1F
char * &str : str 是一個別名, 跟你呼叫函式傳進去的
09/04 12:04, 1F

09/04 12:05, , 2F
是「同一個」指標, 所以在 get_token 裡改 str, main
09/04 12:05, 2F

09/04 12:06, , 3F
裡傳進去的那個也會跟著改到, char *str : str 算是複
09/04 12:06, 3F

09/04 12:07, , 4F
製的一份指標, 就算 get_token 怎麼改他, main 裡的
09/04 12:07, 4F

09/04 12:07, , 5F
那個還是一直指到同一個地方
09/04 12:07, 5F
hi, 我了解您說的,想再確定一下您說"get_token怎麼改它" 指的是*str++ 怎麼動這"指標"沒關係對吧? 因為我認為如果改成故意在get_token裡面寫 str[0] = '*' 那個回到main後,原本字串應該會被改成 *ello, I am C++. ?? ※ 編輯: wawi 來自: 140.113.96.70 (09/04 12:18)

09/04 12:16, , 6F
解讀從右至左 * 符號解讀成「指標」 & 解讀成「別名」
09/04 12:16, 6F

09/04 12:17, , 7F
char * &str : 直譯變成 str 別名 指標 char, 意思是
09/04 12:17, 7F

09/04 12:18, , 8F
'str' 是一個物件的'別名', 那個物件是'指標'指向
09/04 12:18, 8F
※ 編輯: wawi 來自: 140.113.96.70 (09/04 12:18)

09/04 12:18, , 9F
'char' 型態的變數
09/04 12:18, 9F

09/04 12:22, , 10F
雖然都能改動原本的字串, 但是差別在於你的位址被幾個
09/04 12:22, 10F

09/04 12:23, , 11F
指標擁有
09/04 12:23, 11F

09/04 12:40, , 12F
I see !!! thx
09/04 12:40, 12F
文章代碼(AID): #1CWSFlQ_ (C_and_CPP)
文章代碼(AID): #1CWSFlQ_ (C_and_CPP)