zoukankan      html  css  js  c++  java
  • <C和指针---读书笔记9>

    二维数组

     声明和初始化:

    Type  数组名[m][n] : 声明了一个二维数组。 

    Int  matrix[3][4] = { { 00, 01, 02, 03} ,

    { 10, 11, 12, 13} ,

    { 20, 21, 22, 23} }

    视角分析:

      二维数组可以看成一个数组:只不过这个数组由复杂元素组成。

          Int   matrix[3][4] = {❤, ❤, ❤} ,复杂元素❤是一个数组。

     

    存储方式:

      编译器遇到二维数组的声明时,会为其分配一段空间,顺序如图。

    并记录下来, matrix ---- 第一维数组的首地址。 并记录它的指向性。 它是一个地址数据,指向复杂元素0的首地址。

    v

     

    数组名纠纷

    我现在认为: 数组名仅仅是一个代号,它和其他形式定义的变量名称不一样。  

    比如:  int a =9;  编译器记录下:  代号a , 地址为 0x880,值为9. 无指向性。

                   Int *p = &a; 编译器记录如下: 代号p,地址为0x884,值为 0x880, 具有一级指向性。

                  Int arry[3] = { 1, 2,3} 编译器记录如下: 代号arry, 地址为 0x888,值为0x888,具有一级指向性。

    同时分配地址: 0x88C值为1,同时0x890值为2,同时0x894值为3

                Int matrix[2][3] = {2,2,2,1,1,1} 编译器记录如下:  代号matrix, 地址为 0x898,值为0x898,具有二级指向性。

    同时分配地址: 0x89C值为2,同时0x8A0值为2,同时0x8A4值为2

    0x8A8值为1,同时0x8AC值为1,同时0x8B0值为1

       

    Matrix的值为430765216

    Matrix的地址,读出也为430765216。

    Matrix[0] ,将执行 *(matrix +0) = *(matrix) 获得该地址内的值。   

    Matrix[1] ,将执行 *(matrix +1) = *(matrix + 1*3*4) ,相当于加12

    Matrix[0][0],是元素值,为2.

    &(Matrix[0][0]) 是元素的地址。

    P 是p的值。

    &p是p的地址,很显然是自己独立的一个地址。

    *p是获得p地址内存储的值。

     

    下标访问

       Matrix[1] 会被编译器转换成 *(matrix +1)  ,其中matrix符号会取其值,即地址。所以+1,将 +1*sizeof(复杂元素),即行跳

      Matrix[1][2] 会被编译器转换成 *( *(matrix +1) + 2) , *(matrix +1)的结果仍是地址,对地址+2,将执行 +2*sizeof(int)。即元素2。 此时*(地址)就能获取数据了。

    我觉的就是 x+1操作,主要看 x是否具有指向性,如果具有指向,则 +1*sizeof(指向..) 。没有才老老实实+1.

     

    指针数组

     A arrary of point :归根结底是一个数组,只是这个数组的元素有点特别,它们都是 指针。

     char  *p[10] ; 定义了一个数组,它具有10个元素,且这10个元素都是 指向char的指针。

     

    数组指针

    A point to A  array : 归根结底是一个指针,它指向的内容比较特别,指向的是一个数组。那指向数组的哪一部分?

    Char (*p)[10] ;定义了一个指针*p, 它指向一个 长度为10,元素为char的数组。

  • 相关阅读:
    ArcGIS.Server.9.3.DotNet的ADF与ASP.NET AJAX
    ArcGIS.Server.9.3和ArcGIS API for JavaScript保存自定义图形(十)
    android开发我的新浪微博客户端载入页面UI篇(1.1)
    ArcGIS.Server.9.3和ArcGIS API for JavaScript实现距离量算和面积量算(九)
    ArcGIS.Server.9.3和ArcGIS API for JavaScript实现点、线、面的buffer分析(十一)
    android开发我的新浪微博客户端载入页面sqlite篇(1.2)
    市净率PB
    转 未来的GDI:WPF技术纵览
    转 LUA语言学习教程
    sl下的两种跨线程访问方式
  • 原文地址:https://www.cnblogs.com/mokang0421/p/7482587.html
Copyright © 2011-2022 走看看