*(*(a+1)+三)等同 a[1][3] 求解惑
*(*(a+1)+3)等同 a[1][3] 求解惑
不解 a+1 是什么意思
------解决思路----------------------
在一维数组中,定义整形数组 int a[10]; 则a的值和a[0] 的地址相同,也就是a是数组第一个元素的地址,a+1 指向数组的第二个元素。
推广到二维数组中,如 int a[5][3] 可以把二维数组看作特殊的一维数组,里面的元素是int [3] 类型,也就是数组a里面有5个元素,每个元素为一维数组指针(这个一维数组共有3个元素), 根据前面的定义,a是第一个int [3]的地址,则 a+1 是第二个int [3]的地址,所以
![*(*(a+1)+三)等同 a[1][3] 求解惑 *(*(a+1)+三)等同 a[1][3] 求解惑](/default/index/img?u=aHR0cDovL3d3dy5teWV4Y2VwdGlvbnMubmV0L2ltZy8yMDE0LzExLzA5LzEwMzA1MjgyLmpwZw==)
------解决思路----------------------
首先你得知道a的类型
假设a[m][n]二维数组
a的类型:(*)[n];那么a+1就是偏移n个元素
*(a + 1)的类型:[n]或者说是一维指针*;那么*(a+1)+3指向第二行第三列元素
最后加上一个*即*(*(a+1)+3),就是第二行第三列元素喽
a[1][3]还等价与*(a + 1 * n + 3) 还等价于*(&a[1][0] + 3)
不解 a+1 是什么意思
------解决思路----------------------
在一维数组中,定义整形数组 int a[10]; 则a的值和a[0] 的地址相同,也就是a是数组第一个元素的地址,a+1 指向数组的第二个元素。
推广到二维数组中,如 int a[5][3] 可以把二维数组看作特殊的一维数组,里面的元素是int [3] 类型,也就是数组a里面有5个元素,每个元素为一维数组指针(这个一维数组共有3个元素), 根据前面的定义,a是第一个int [3]的地址,则 a+1 是第二个int [3]的地址,所以
------解决思路----------------------
首先你得知道a的类型
假设a[m][n]二维数组
a的类型:(*)[n];那么a+1就是偏移n个元素
*(a + 1)的类型:[n]或者说是一维指针*;那么*(a+1)+3指向第二行第三列元素
最后加上一个*即*(*(a+1)+3),就是第二行第三列元素喽
a[1][3]还等价与*(a + 1 * n + 3) 还等价于*(&a[1][0] + 3)