对于C语言的初学者们,有关二维数组a[i][j]与指针*(*(a+i)+j)之间的关系,确实困扰了不少人。听我慢慢道来,看完后一定会完全理解的哦!
1、首先要理解二维数组是由多个一维数组构成的。例如:a[3][4] = {a[0],a[1],a[2],a[3]};这里的元素:a[0],a[1],a[2],a[3],其实表示的是一维数组的首地址,也就是说是二维数组a[3][4]的每行数组的首地址。
2、*(*(a+i)+j)其中的i、j表示偏移量,*号表示取值。
3、在二维数组a[i][j]中,a[i]表示第i行数组的首地址,a在这里可以理解是二维数组的首行数组的首地址。所以会有: a[i] = *(a+i); 关键点理解:*(a+i) 确实取得的是一个值,它是一个二维数组中第i个元素的地址。
4、接下来便是: a[i]+j = *(a+i)+j; 等式两边均表示二维数组中第i行第j列元素的地址。
5、最后: a[i][j] = *(*(a+i)+j);便是直接取到二维数组中的元素的值。
多说一句,二维数组可以与二级指针来对照理解,希望对你有所帮助。 |
|