转自https://www.zybang.com/question/7c6ed03ad3671faf527268e0c66ebb9e.html

1. *a:以a[0][0]为首元素的一维数组.可带一个索引:(*a)[i] 即a[0][i]
2. a:以a[0][0]为首元素的二维数组.可带两个索引:a[i][j]
3. a[0]:同*a
4. a[0][0]:首元素
5. a[1]:以a[1][0]为首元素的一维数组.可带一个索引.
6. &a[1]:以a[1][0]为首元素的二维数组.可带两个索引:(&a[1])[i][j]即a[i+1][j]
要掌握它们的区别,关键是掌握它们各自支持的运算符的不同处理.
对于运算符’+’:a[0][0]执行的是数学上的加法;而其余的由于都是指针,执行的都是地址的加法,而且有的加1是指向同一行中的下一列上的元素(如*a、a[0]和a[1]),有的加1是指向同一列中的下一行上的元素(如a和&a[1]).
对于运算符’*’:
a[0][0]执行的是数学上的乘法,如a[0][0] * 2;
*a、a[0]和a[1]执行的是取值,如**a + *a[0] + *a[1]
a和&a[1]执行的是由原来的二维数组变为一维数组,也可理解为改变指针的类型,其加1的意义就不同了,如a+1和(*a)+1的不同.

 

二维数组是一维数组的数组,对二维数组a来说,它的元素a[1]就是下标为1的一行数据,是个一维数组,而a[1]作为这个一维数组的名字,其实就是指向数组第一个元素的指针,即这一行的首地址。

a[1]+1即a[1][1]的地址,因此*(a[1]+1)即间接访问a[1][1]。 如果不能理解,不妨把a[1]想成另一个名字,例如b。*(b+1)即b[1],肯定是好理解的。*(a+1)是数组元素。但a是二维数组,那你就要再进一步理解了。
因为a是二维数组名,即是一维数组a[0] 、a[1] 、a[2] 的首地址。
a+1就是 a[1]的地址。
*是取指针的值。
那么*(a+1)就是取 a[1]的值。
它是什么呢?它又是一个数组: a[1][0], a[1][1] ,a[1][2]。
而且 a[1]是它们的首地址。
即 a[1]的值就是 a[1][0]的地址。(多维数组中除最后一位其他都为首地址)
 

原文地址:http://www.cnblogs.com/lcy1455/p/16909437.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性