深入理解二维数组

 对二维数组一层一层剥离

  1. 二维数组单独一个 a 代表的是什么?

  2. 二维数组的首元素,第二个元素,第三个元素........表示什么?注意元素的概念

  3. a[0]、a[1]、a[2]又各自代表什么,有几层含义,为什么有多层含义?

  4. a[0] + 1,a[0] + 2,a[0] + 3;a[1] + 1,a[1}+2,a[1]+3.....代表什么?

  5. a + 1,a + 2,a + 3,a + 4又代表什么?

  6. *(a+i) == a[i]?为什么?一定要分析透彻,地址和元素值的深入理解

  7. *(a[i]+j) == *(*(a+i)+j)  == a[i][j]?为什么?

分析思路:

等号左边:a是什么?那a + i呢(为什么)?跟二维数组的元素定义有关

等号右边:a[i]代表的含义

用例子来说明 

int a[3][4]=
{
1,3,5,7,
9,11,13,15
17,19,21,23
};

附录:

a                                                                     二维数组名,指向一维数组a[0],即0行地址

a[],*(a+0),*a                                                    0行0列元素的地址

a+1,&a[1]                                                         第1行首地址

a[1],*(a+1)                                                        a[1][0]的地址

a[1]+2,*(a+1)+2,&a[1][2]                                  a[1][2]的地址

*(a[1]+2),*(*(a+1)+2),a[1][2]                   a[1][2]de值

 

  1.  a代表二维数组的首元素的地址
  2. 首元素是第一个一维数组,第二个元素是第二个一维数组.....。因此,a是第0行的首地址,a+1代表第1行的首地址,因此a+1是a[1]的地址。

  3. a[0],a[1],a[2]既然是一维数组名,而c语言规定数组名代表数组首元素地址,因此a[0]是第0行第0列的地址,即a[0]=&a[0][0],同理有a[1]=&a[1][0],a[2]=&a[2][0]。

    由此可以有:a[0]+0,a[0]+1,a[0]+2,a[0]+3是a[0][0],a[0][1],a[0][2],a[0][3]的地址,即&a[0][0],&a[0][1],&a[0][2],&a[0][3]。

    因为有a[0]和*(a+0)等价(为什么?要想清楚),a[1]和*(a+1)等价,a[2]和*(a+2)等价,所以有*(a[i]+j) == *(*(a+i)+j)  == a[i][j]。务必记住:*(a+i) == a[i]。

猜你喜欢

转载自blog.csdn.net/vict_wang/article/details/81635303