黑马程序员技术交流社区

标题: 详解有关二维数组a[i][j]与指针*(*(a+i)+j)的关系 [打印本页]

作者: 叶子哥    时间: 2016-1-16 11:07
标题: 详解有关二维数组a[i][j]与指针*(*(a+i)+j)的关系
    对于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);便是直接取到二维数组中的元素的值。
多说一句,二维数组可以与二级指针来对照理解,希望对你有所帮助。
作者: L1184343637    时间: 2016-5-24 23:08
啦啦啦啦~~~
作者: TGII    时间: 2016-5-25 00:30
二维数组与二级指针区别大了,不能这么理解,我感激啊二维指针变量可以对照理解




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2