指针与二维数组的关系

来源:互联网 发布:淘宝潮男秋装 编辑:程序博客网 时间:2024/05/16 12:32

如下代码  

#include <stdio.h>

  int main()
 {
   int a[3][2] = {0, 1, 2, 3, 4, 5};
    
  int i, j;
    
  for (i = 0; i < 3; i++)
    {
        
      for (j = 0; j < 2; j++)
        
      {
            
       printf("a[%d][%d] = %d\t", i, j, a[i][j]);
        printf("*(*(a + %d) + %d) = %d\n",i, j, *(*(a + i) + j));
         
      }   
   }
  
  return 0;

 }    

   得到的结果就是都是一样的,遍历数组中的元素的值。这说明,数组的值其实可以痛过指针的方式去得到。

   上次已经说过,a代表的就是数组的首元素的地址,那么*a就是取出首元素值的操作。但那是针对于一维数组而言的。

  那么对于二维数组来说,又是不一样的。但是,我们可以根据一维数组来推导二维数组。

   二维数组,就是在一维数组的每一个格子里面,再细分为一个数组。

   于是,原本一维数组的*a取的是一维数组的值,那么在二维数组中,它取的就是首行的值,也就是a[0][],这并不是某一个元素的值,而是一组元素,所以,取出来的并不是值,而仍然是地址,一个小数组的首元素地址。那么,我们如果想要取下一行的数组,就只要在a上+1,也就是*(a+1)。第i行就是*(a+i)。

   那么,接下来的,就是取列已经取到了一维数组的首地址,那么接下来取出值就很简单了,依次类推,就是*(*a),这取的就是第一行的第一列,也就是a[0][0]。那么,要想取后面的,只要增加列就行了即*(*a+j)。那么,要想取出a[i][j]的值,就只要*(*(a+i)+j)就行了,如上面的代码。

  这就是二维数组和指针的关系。

  

0 0