看板 C_and_CPP 關於我們 聯絡資訊
void getMem(char *ptr) { *ptr = (char*)malloc(200); } main() { char *str = NULL; getMem(&str); strcpy(str, "Hello C/C++ programming"); printf("%s\n", str); } 我試過void getMem(char **ptr) 改成兩個星號才會過 不懂為什麼?? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 122.121.31.79 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1455894311.A.A00.html
james732: 置底十三誡的第十三? 02/19 23:11
您好, 我剛看完了 可是他最後問我想想&str會傳甚麼給副程式? 位址吧? 那為什麼用兩顆星號**ptr接 就可以呢? 我不太懂用副程式 **ptr 是甚麼意思...... ※ 編輯: kai5566 (122.121.31.79), 02/19/2016 23:29:58
crazycy: str的型態... 02/19 23:28
kai5566: 不好意思 我覺得我很弱 可以麻煩多解釋一些嗎? 02/19 23:30
crazycy: 你main裡的str是char* 02/19 23:33
crazycy: &str 就是char** 02/19 23:34
感謝你!!! 這樣我知道為什麼副程式用 **ptr了 但有個新問題 為何&str 是 char** ??? 我讀了很多指標資料沒有提到這個... 不知道大哥願不願意幫忙解釋,或有相關資料給我閱讀嗎?
crazycy: *ptr 是指 ptr這個位址指向的目標 02/19 23:45
crazycy: &str 是指 指向str這個變數的位址 02/19 23:46
嗯嗯 這個我知道~~~~ 那為什麼您說&str是 char**呢? ※ 編輯: kai5566 (122.121.31.79), 02/19/2016 23:47:52
crazycy: 所以原本你的str是char* 是指向一個char的指標 02/19 23:49
crazycy: 你再取&str 就是 指向一個(char*)的指標 02/19 23:50
kai5566: 我想一下......我讀指標的書怎麼都沒講到這些= = 02/19 23:56
overhead: 關鍵字"雙重指標" 02/20 01:08
Frozenmouse: 把char*看成T的話,&str就是T*,會不會比較好懂XD 02/20 03:40
fightforlive: 字串型態宣告通常為char str_name[], 所以可以知道 02/20 05:20
fightforlive: 為字元陣列.陣列名稱本身就是第一個元素的記憶體位 02/20 05:20
fightforlive: 址,又&str_name為取記憶體位址,所以需要表示成char* 02/20 05:20
fightforlive: *,也可以是char*[陣列大小].但是其實現再只有一個字 02/20 05:20
fightforlive: 串,而不是字串陣列(多個字串),所以&str_name還是指 02/20 05:20
fightforlive: 第一個字元的記憶體位址.如果為多個字串,則指第一 02/20 05:20
fightforlive: 個字串的第一個字元記憶體位址 02/20 05:21
感謝crazy大大、感謝overhead提供關鍵字 感謝froze哥以及感謝熱心的fight大!!!這題我了解了 再來仔細複習一下~thxxxx ※ 編輯: kai5566 (122.121.31.79), 02/20/2016 09:30:48
stupid0319: 指標大魔王 02/20 16:29