不知道楼主搞懂了吗,我刚学,我是这样理解的:
根据数组名即首地址定律
p = p + 0 = p[0] = *(p + 0) = * p = &p[0] = &(&p[0][0])
由于p[0]元素实际并不存在,c语言规定 p[i] = &p[i] , 即第i行第0列的地址
p[i] = p + i = &p[0] + i = &p[i]
*(p + i) = *&p[i] = p[i] = &p[i]
*(p + i) + j = &p[i][j]
*(*(p+i) + j) = p[i][j]
printf("\n%d, %d, %d, %d, %d\n", B + 1, B[1], &B[1], &B[1][0], *(B + 1));
你会发现它们的地址全部一样!!!
(-_-)所以这就是大家不建议数组用指针的原因