在二维数组中,遇到a + i 和*(a + i)相等,一般意思上理解 *(a + i)是取a + i中内容,怎么会相等呢?一下是我查找资料和的解析。
重点讲解:
我们知道取一存储单元中的内容的时候,可以用指针去取,
即假如int arr[10]; int *p =arr; 我们可以用*p来取p所指向内存单元中的内容。
可以上面最后一个图片中看到,二维数组被看作一维数组,一维数组中的内容分别是a[0] ,a[1], a[2]。(而且,a[0]代表第一个一维数组的数组名和该一维数组的首地址,a[1]代表第二个一维数组的数组名和该一维数组的数组首地址)而且分别由a,a+1,a+2来对应的指向a[0],a[1],a[2]。所以,可以用*a+1来取a+1所指向内存单元中的内容->a[1]。从而,*(a + 1) 和 a[1] 同等含义,又因为 a+1 和a[1]同等含义,所以
二维数组中 a+i, a[i], *(a + i) , &a[i][0] 同等含义<==> 二维数组第i行元素首地址
,且后续的我们知道 &a[ i ] = a[ i ](原因:实际的二维数组中并没有a[ i ]这样一个元素,是方便我们理解和查找所定义的,它是一种地址算法)。
总之:a+i, a[i], *(a + i) , &a[i][0] , &a[ i ] 含义一样