请教大神一个指向指针的指针问题,求教。。。。

int main()

{char **p;

char *name[]={"basic","fortran","c++"};

p=name;

cout<<*p<<endl;

cout<<**p<<endl;

}

为啥结果分别是basci和b啊。

如果语句变成如下,输出又是什么?

int main()

{char **p;

char *a="basic";

p=a;

cout<<*p<<endl;

cout<<**p<<endl;

}

结果是basic和b吗?为啥?


灯心人
浏览 1629回答 5
5回答

慕粉3440107

申请的一个字符内存单元,char p = 8,人通过p(假设)认识,计算机通过0x0002(假设)标识,&p 获取0x0002char *pt (4个字节)  pt = &p ------> 即将0x0002 复制给pt ,通过*pt 访问p的值8。所以指针pt的值是一个计算机能标识的十六进制的数,整型p存放的是数据8。以上是我对指针的理解,不知道对你有没有帮助。

_琉璃玉匣藏锦梦_0

chra *name理解为从内存中申请一段空间,chra *name[]就是数组中的每个元素都是一段空间,p=name ,理解为p指向name数组元素,就是第一段空间(看做整体),p++为第二个数组元素(第二段空间)*p指向数组中的第一个元素(第一段空间的整体),也就是basic ; 而**p是指向第一个元素的指针(指向第一段空间中的元素)就是b,*(++*p)输出为a用第二个问题更好理解,p=a,p指向a的整体就是basic,**p就是指向a中的第一个元素,就是b

灯心人

不知道你的解释对不对,希望有大神指出来……

慕粉3302418

我的理解是这样的。。。上面的 *p = *name = name[0]-->"basic" ,如果当二维数组看待的话展开成name[3][8]的数组。 p = name = &name[0]  指向第一行“basic”的首地址, *p = *(&name[0])=name[0];      **p =**name = **(&name[0])=*(name[0]) = *(&name[0][0]) = name[0][0] = b.下面的其实也同理     *p = *a = &a = b  , **p = *(&a) =  &b =0xfffffff....-->b的地址指针我也是半桶水。。。不知解释合不合理。
打开App,查看更多内容
随时随地看视频慕课网APP