作者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/cn.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