指针讲解(二)

来源:互联网 发布:reputation 专辑 知乎 编辑:程序博客网 时间:2024/05/18 09:04

                                                                                         二维数组指针(二)

      在(一)中,我们简单的讲解了简单指针,内容包含三部分数组作为形参,解引用,定义指针,这小节我根据自己的认识讲解一点二维数组的认知

        什么是二维数组?

        二维数组形如  int arr[ 3 ][ 4 ] ,这样形式的数组,在一维数组中 我们说  int arr[ 3 ]={1,2,3} 代表一个数组arr中含有3个整型元素,那么 int arr[ 3 ][ 4 ] 跟一维数组类似,表示 数组arr中含有 3*4=12个整型元素,也可以像理解一维数组一样理解二维数组

          arr[ 3 ][ 4 ]={ {1,2,3}, {4,5,6,}, {7,8,9} }  ,二维数组其实是数组的数组,即数组arr含有3个一维数组,每个一维数组含有4个整型元素,个人是这样理解arr[ 3][4 ] 同等于 arr[3]={  arr[0] , arr[1] , ar r[2] }  (个人理解)  也可以理解为3*4的矩阵      

                      int   a[3][4]     最好的官方理解就是3*4方阵

   

        a[0]   →  arr[0][0]   arr[0][1]    arr[0][2]     arr[0][3]

        a[1]     arr[1][0]   arr[1][1]    arr[1][2]     arr[1][3]

        a[2]    arr[2][0]   arr[2][1]    arr[2][2]     arr[2][3]

现在讲几个概念

        当数组名 单独存在一个printf语句输出内容中 或&a单独存在的时候时  表示一个数组整体  

                   printf("%d,"sizeof(a))               48    整个数组的大小,12个元素,一个元素四个字节(int在vs2008占4字                                                                      节)

                   printf("%d,"sizeof(&a))            假如 数组a的第一个元素地址是2000,那么前面的printf语句结果为                                                                                2000+12*4       

       *a                    a并没有单独存在,还有一个解引用,在一维数组中,数组名就是一个指针,指向数组的第一个元                               素 ,那么在二维数组中也类似(联想3*4的矩阵),指针实际是指向数组的0行首元素,*a就是                                           第0行第0列元素的地址

        a+i                  指向第 i 行首元素,那么结合上一题,那么可以这样总结,对于二位数组,a的+/-实际上是对行的                                加减

        a[i]                  指向第i行首元素

       *(a+i)               对第i行首元素解引用,实际就是第 i 行首元素地址

       *(a+i)+j            在一维数组中,a={0,1,2}  a指向0,当a+3指向的就是元素2,同理,指针a指向第 i 行第 j 列的元                                  素,解引用为第 i 行第 j 列的元素的地址(可以这样理解,*(a+i)则是对数组的数组进行操作,a+i指向第 i 行首元素,解引用后就是进入了数组(a[0],a[1],a[2])的数组里面,*a[ i+0 ]+1实际就是当前部分解引用,指针从a[0]   a[1]  a[2]进入a[0]中,就指向a[0][0],+j 指针移动到 a [ 0 ] [ j ]的位置 )

       *(*(a+i)+j)       整体来看 其实就是对上式解引用,其实就是第 i 行第 j 列的元素的值

       &a[i]                a[ i ]是表达第 i 行首元素地址

       &a[i][j]            a[ i ][ j ]是表达第 i 行第 j 列元素地址

       &(a+i)            第i行的首地址

       

搞懂了这些,你的二维数组也基本理解了,下次我们将讲一些这些鬼玩意儿的应用,坑很多

             

0 0