为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C++
灯心人 2016-05-30 21:01:13
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吗?为啥?
查看完整描述

5 回答

?
慕粉3440107

TA贡献1条经验 获得超0个赞

//img1.sycdn.imooc.com//574d176900014f1108320702.jpg

申请的一个字符内存单元,char p = 8,人通过p(假设)认识,计算机通过0x0002(假设)标识,&p 获取0x0002

char *pt (4个字节)  pt = &p ------> 即将0x0002 复制给pt ,通过*pt 访问p的值8。所以指针pt的值是一个计算机能标识的十六进制的数,整型p存放的是数据8。

以上是我对指针的理解,不知道对你有没有帮助。



查看完整回答
反对 回复 2016-05-31
?
_琉璃玉匣藏锦梦_0

TA贡献1条经验 获得超0个赞


chra *name理解为从内存中申请一段空间,chra *name[]就是数组中的每个元素都是一段空间,

p=name ,理解为p指向name数组元素,就是第一段空间(看做整体),p++为第二个数组元素(第二段空间)

*p指向数组中的第一个元素(第一段空间的整体),也就是basic ;

 而**p是指向第一个元素的指针(指向第一段空间的元素)就是b,*(++*p)输出为a

用第二个问题更好理解,p=a,p指向a的整体就是basic,**p就是指向a中的第一个元素,就是b

查看完整回答
反对 回复 2016-05-31
  • 灯心人
    灯心人
    为啥**P指向的是第一段空间的第一个字符?
  • _琉璃玉匣藏锦梦_0
    _琉璃玉匣藏锦梦_0
    *p是以p地址指向的空间中第一个地址的值,就是数组中第一个元素basic, **p是以*p地址就是第一个元素basic的地址做为指针,指向*p地址中的第一个元素就是b。
  • 灯心人
    灯心人
    虽然还不是很懂,但谢谢你了
?
灯心人

TA贡献2条经验 获得超0个赞

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

查看完整回答
反对 回复 2016-05-31
?
慕粉3302418

TA贡献1条经验 获得超0个赞

我的理解是这样的。。。上面的 *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的地址

指针我也是半桶水。。。不知解释合不合理。


查看完整回答
反对 回复 2016-05-31
  • 5 回答
  • 0 关注
  • 1628 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信