前言

指针和数组的关系,首先要知道一些人为的表示符号。

  • [] 和 * –> 取值      //所以,这两种写法可以替换
  • &     –> 取地址
  • & * [] 同时存在时可以互相抵消

示例

  地址  |            值                 |
  a   |   a[0]  |  a[1]   |   a[2]    |

 a[0] | a[0][0] | a[0][1] |  a[0][2]  |
      |    1    |    2    |     3     |
 a[1] | a[1][0] | a[1][1] |  a[1][2]  |
      |    4    |    5    |     7     |
 a[2] | a[2][0] | a[2][1] |  a[2][2]  |
      |     8   |    9    |     10    |

  • 往下取值,往上地址
    | a |
    | a[0] |
    | a[0][0] |

重要切换,原来一维数组a[x]是值,而二维数组是地址。Anyway,最终的取值才是值。

等价写法

  1. a[2] == * (a + 2) //先在a的地址上 +2 ,然后取值
  2. str = &str[0];
    //str是数组的地址,&str[0]是首元素的地址
    而规定他们两相等
  • 例题a[2][1]
  1. *(a + 2) = a[2] //在 a地址上 +2 ,然后取值
  2. 得*(*(a + 2) + 1) // Don’t forget 在二维数组中,(a + 2)还是地址
    // 在地址上 +1 再取值

Keep in mind, +2 还是地址上的 +2,还没有取值。