首先数组名编译器会隐式变换看做指针常量,因此a[i]与a+i是等价的。
a+i返回由i指定的行地址,假设元素类型为char,则行指针类型为char (*)[n],其中n为列宽,即每行元素数量。当行指针指向一个地址时,此弊启扰时该行首元素地址与行地址是一致的,但是类型不同,租旦很重要,你必须要明确,这个是理解二维数组指针的关键。旁坦
星号在指针前含义为取指针指向内存中的值,但是由于行指针指向的是一行元素整体而不是单个元素,因此*(a+i)返回i指定行的所有元素,但是一行元素是不可能以值的形式直接获得,所以编译器返回的是一维数组指针char *,所以再此情形下你可以理解为星号是将行指针转换为普通一维数组指针,即 char (*)[n]转换为 char *。
&a[i]返回i指定行的第一元素地址,与&a[i][0]等价。