作者kai5566 (改名Dirk_AI56)
看板C_and_CPP
標題[問題] 指標陣列 傳遞問題?想了超久
時間Fri Feb 19 23:05:07 2016
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://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1455894311.A.A00.html
1F:→ james732: 置底十三誡的第十三? 02/19 23:11
您好,
我剛看完了
可是他最後問我想想&str會傳甚麼給副程式?
位址吧? 那為什麼用兩顆星號**ptr接 就可以呢?
我不太懂用副程式 **ptr 是甚麼意思......
※ 編輯: kai5566 (122.121.31.79), 02/19/2016 23:29:58
2F:→ crazycy: str的型態... 02/19 23:28
3F:→ kai5566: 不好意思 我覺得我很弱 可以麻煩多解釋一些嗎? 02/19 23:30
4F:→ crazycy: 你main裡的str是char* 02/19 23:33
5F:→ crazycy: &str 就是char** 02/19 23:34
感謝你!!! 這樣我知道為什麼副程式用 **ptr了
但有個新問題
為何&str 是 char** ???
我讀了很多指標資料沒有提到這個...
不知道大哥願不願意幫忙解釋,或有相關資料給我閱讀嗎?
6F:→ crazycy: *ptr 是指 ptr這個位址指向的目標 02/19 23:45
7F:→ crazycy: &str 是指 指向str這個變數的位址 02/19 23:46
嗯嗯 這個我知道~~~~
那為什麼您說&str是 char**呢?
※ 編輯: kai5566 (122.121.31.79), 02/19/2016 23:47:52
8F:→ crazycy: 所以原本你的str是char* 是指向一個char的指標 02/19 23:49
9F:→ crazycy: 你再取&str 就是 指向一個(char*)的指標 02/19 23:50
10F:→ kai5566: 我想一下......我讀指標的書怎麼都沒講到這些= = 02/19 23:56
11F:推 overhead: 關鍵字"雙重指標" 02/20 01:08
12F:推 Frozenmouse: 把char*看成T的話,&str就是T*,會不會比較好懂XD 02/20 03:40
13F:推 fightforlive: 字串型態宣告通常為char str_name[], 所以可以知道 02/20 05:20
14F:→ fightforlive: 為字元陣列.陣列名稱本身就是第一個元素的記憶體位 02/20 05:20
15F:→ fightforlive: 址,又&str_name為取記憶體位址,所以需要表示成char* 02/20 05:20
16F:→ fightforlive: *,也可以是char*[陣列大小].但是其實現再只有一個字 02/20 05:20
17F:→ fightforlive: 串,而不是字串陣列(多個字串),所以&str_name還是指 02/20 05:20
18F:→ fightforlive: 第一個字元的記憶體位址.如果為多個字串,則指第一 02/20 05:20
19F:→ fightforlive: 個字串的第一個字元記憶體位址 02/20 05:21
感謝crazy大大、感謝overhead提供關鍵字
感謝froze哥以及感謝熱心的fight大!!!這題我了解了
再來仔細複習一下~thxxxx
※ 編輯: kai5566 (122.121.31.79), 02/20/2016 09:30:48
20F:推 stupid0319: 指標大魔王 02/20 16:29