当前位置:天才代写 > tutorial > C语言/C++ 教程 > C语言基本教程(四)指针、布局、连系和列举(5)

C语言基本教程(四)指针、布局、连系和列举(5)

2017-11-03 08:00 星期五 所属: C语言/C++ 教程 浏览:344

2.2.指向二维数组的指针
2.2.1.二维数组元素的地点
为了说明问题,我们界说以下二维数组:
int a[3][4]={{0,1,2,3},{4,5,6,7},{8,9,10,11}};
a为二维数组名,此数组有3行4列,共12个元素。但也可这样来领略,数组a由三个元素构成:a[0],a[1],a[2]。而它匀中每个元素又是一个一维数组,且都含有4个元素(相当于4列),譬喻,a[0]所代表的一维数组所包括的4个元素为a[0][0],a[0][1],a[0][2], a[0][3]。如图5.所示:
┏━━━━┓ ┏━┳━┳━┳━┓
a─→ ┃ a[0] ┃─→┃0 ┃1 ┃2 ┃3 ┃
┣━━━━┫ ┣━╋━╋━╋━┫
┃ a[1] ┃─→┃4 ┃5 ┃6 ┃7 ┃
┣━━━━┫ ┣━╋━╋━╋━┫
┃ a[2] ┃─→┃8 ┃9 ┃10┃11┃
┗━━━━┛ ┗━┻━┻━┻━┛
图5.
但从二维数组的角度来看,a代表二维数组的首地点,虽然也可当作是二维数组第0行的首地点。a+1就代表第1行的首地点,a+2就代表第2行的首地点。假如此二维数组的首地点为1000,由于第0行有4个整型元素,所以a+1为1008,a+2也就为1016。如图6.所示
a[3][4]
a ┏━┳━┳━┳━┓
(1000)─→┃0 ┃1 ┃2 ┃3 ┃
a+1 ┣━╋━╋━╋━┫
(1008)─→┃4 ┃5 ┃6 ┃7 ┃
a+2 ┣━╋━╋━╋━┫
(1016)─→┃8 ┃9 ┃10┃11┃
┗━┻━┻━┻━┛
图6.
既然我们把a[0],a[1],a[2]当作是一维数组名,可以认为它们别离代表它们所对应的数组的首地点,也就是讲,a[0]代表第0行中第0列元素的地点,即&a[0][0],a[1]是第1行中第0列元素的地点,即&a[1][0],按照地点运算法则,a[0]+1即代表第0行第1列元素的地点,即&a[0][1],一般而言,a[i]+j即代表第i行第j列元素的地点,即&a[i][j]。
别的,在二维数组中,我们还可用指针的形式来暗示各元素的地点。如前所述,a[0]与*(a+0)等价,a[1]与*(a+1)等价,因此a[i]+j就与*(a+i)+j等价,它暗示数组元素a[i][j]的地点。
因此,二维数组元素a[i][j]可暗示成*(a[i]+j)或*(*(a+i)+j),它们都与a[i][j]等价,可能还可写成(*(a+i))[j]。
别的,要增补说明一下,假如你编写一个措施输出打印a和*a,你可发明它们的值是沟通的,这是为什么呢? 我们可这样来领略:首先,为了说明问题,我们把二维数组工钱地当作由三个数组元素a[0],a[1],a[2]构成,将a[0],a[1],a[2]当作是数组名它们又别离是由4个元素构成的一维数组。因此,a暗示数组第0行的地点,而*a即为a[0],它是数组名,虽然照旧地点,它就是数组第0行第0列元素的地点。

 

    关键字:

天才代写-代写联系方式