A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 408205555 中级黑马   /  2015-7-22 12:15  /  547 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 408205555 于 2015-7-22 12:16 编辑

每一步都分析的很详细,有耐心看一定看得懂。欢迎交流
//创建int类型的变量a,值是5,假设变量地址为0x01
int a=5;
int *p=&a;
int **p1=&p;

*p=?,*p1=?,**p1=?
1、*p=?
- 分析之前先确定p是指针(地址),*p是存取值
- 假设&a=0x01,&p=0x05
创建指针变量p,p指向a。
p是一个指针,它存放的是一个地址,因为p指向了a,所以它存放的是a的地址。
所以p=a的地址=0x01
*p是取值,取指针p所对应内存单元中的内容,因为指针p的指向地址是0x01
所以*p使取地址0x01对应的值
所以*p=5;
2、*p1=?
创建二级指针变量p1,p1指向了p,所以p1存放的是p的地址。
所以p1=&p=0x05;
所以*p1是取内存编号0x05所对应的值,0x05里存的是a的地址
所以*p1=a的地址0x01。
3、**p1=?
已经得出*p1=a的地址0x01;
那么**p1就相当于*0x01,也就是取内存地址编号为0x01所对应的内存单元中的值,这个值就是a的值(*0x01=a=5)。所以**p1=5;
4、把上面总结一下就是:*p是取指针p的值,p的地址=a的地址,*p就是取a的地址的值,就是5。*p1是取指针p1的值,p1的地址=p的地址,就是取p的地址的值,就是0x01,同样0x01它也是a的地址。**p1是取二级指针p1的值,综上已经得出*p1就是a的地址,那么我再取a的地址的值,那就是5。
----------------------------------------------------------------
只要弄懂p是指针(地址),*p是存取值以及每个地址里存的是什么就很好理解了。

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马