作者harristime (瀚宇)
看板C_and_CPP
标题双重指标问题
时间Mon Apr 10 23:34:53 2017
各位朋友们好,最近我在研究双重指标的用法,有个问题一直想不出来为什麽
Code:
int main() {
char *name = "Rick";
char **pp = &name;
printf("string Rick is stored in %p\n", name);
printf("name's address is in %p\n", &name);
printf(" **pp's address is %p\n", &pp);
printf(" *pp with %/p = %p\n", *pp);
printf(" *pp with %/s = %s\n", *pp); //这行反倒可以解出内容 ’Rick’
printf(" **pp's dereference = %s\n", **pp); // 我想解出内容,但出现警告与Segmentaion fault
Result:
string Rick is stored in 0x8048530
name's address is in 0xbf9e9c9c
**pp's address is 0xbf9e9c98
*pp with %/p = 0x8048530
*pp with %/s = Rick
Segmentation fault
为什麽Rick是使用 *pp解出来而不是**pp呢?
为什麽 *pp可以同时解出字串存放的位置跟字串内容呢?
谢谢
--
Sent from my Windows
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 36.228.2.202
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1491838496.A.4FE.html
1F:推 LPH66: 嗯...如果你只是想要理解双重指标的话, 用个整数变数吧 04/10 23:57
2F:→ LPH66: 在这里掺进字串变数跟字元阵列的关系会搞得更乱 04/10 23:57
3F:→ LPH66: 简言之, C 字串在很多地方跟字元阵列很像 04/10 23:58
4F:推 kokal: %s要接pointer, dereference两次就爆掉啦 04/11 00:04
5F:推 c910335: 把 %s 换成 %c 跑跑看你应该就能理解了 04/11 05:30
6F:→ outofyou: 其实测试Result足够给你解答了, 04/11 12:17
7F:→ outofyou: 但要先厘清初学者逻辑,不要又测%s、%p,又测&、*、**。 04/11 12:21
8F:→ outofyou: 回答问题,*pp == name,所以这2个的%p及%s一样才正常。 04/11 12:26