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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 晗修 中级黑马   /  2015-6-4 17:26  /  901 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 晗修 于 2015-6-4 17:50 编辑

本来是想提问的,突然就明白了,打出来交流一下吧,如果有错请务必告诉我。
     一维数组 int  a[4]= {1,2,3,4}  其中a=&a[0] ,这里我还没有产生什么疑问。
      当学习到二维数组 例如 int  b[2][2] = {1,2,3,4}     b[k] =&b[k][0]
     *(b+k)= b[k] ;
这时我产生了一个疑问:*(b+k) = b[k]    *b[k]=b[k][0]   *(*(b+k)+j)=b[k][j]

1)我们知道b+k和b[k]其实是指向同一个地址的 ,为什么会有取值操作呢?
2)既然是相同的地址 为什么两次取值得到的结果不一样!
3) **p  是首先是取出p中存储的地址 然后再取出p中存贮的地址所指向的地址的值  那么**b=b[0][0] 也是同理,、
那么b,b 首先要存储一个地址 但是数组的内存分配并没有分配空间用来存储地址!


1) b+k 和b[k]虽然指向了同一个地址 但是他们的数据类型不一样;
2)理由同上
3)数组名是常量!

2 个回复

倒序浏览
表示指针这一块学的比较难 !!!
回复 使用道具 举报
分析的很好,说的是这个道理
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马