------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------
二维数组即已数组作为元素的数组。
定义方法为:
类型说明符 数组名[一维长度][二维长度];二维数组名是指向数组的第一个元素的指针变量。二位数组可以看成是一维指针数组。
存储方式:
设有二维数组 int a[2][3] = {{0,1,2},{3,4,5}};i表示一维,j表示二位,则其在内存中的存储方式可以表达为
0x7fff5fbff7c0 | a[0][0] | |
0x7fff5fbff7c4 | a[0][1] | |
0x7fff5fbff7c8 | a[0][2] | |
0x7fff5fbff7cc | a[1][0] | |
0x7fff5fbff7d0 | a[1][1] | |
0x7fff5fbff7d4 | a[1][2] |
可看出二维数组和一维数组的存储方式是一样的,都是线性存储。
访问元素方式:
二维数组a的第一维为二维数组的元素,每个元素是包含3个int类型元素的数组。数组名a为指向二维数组第一个元素的指针常量,此二维数组分配内存的首地址为0x7fff5fbff7c0,a代表0x7fff5fbff7c0常量。是一个指向一个类型为int、维数为3的一维数组的指针常量。a + 1的值视a的类型,是一个指向一个类型为int维数为3的一维数组的指针常量,则a + 1就是下一个类型为int维数为3的一维数组的地址。所以a+i 指向a[i],而a[i]+j指向a[i][j],*(a[i]+j)则表示a[i][j]的值,而*(*(a+i)+j) 则等于*(a[i]+j).
所以访问元素a[1][0]的值方法有:
*a[1]
*(*(a+1)+0) ==** (a+1)
a[1][0]
三种方式
取出a [1][0]地址的方式有:
*(a + 1)
&a[1]
&a[1][0])
a[1])
a + 1