C语言指针学习笔记

1-二维数组指针

  1. int a[3][4]
  2. a代表二维数组首元素的地址,此首元素不是一个简单的整形元素,而是由4个整形元素组成的一维数组,因此a代表的是首行(序号为0的行)的起始地址
  3. a+1代表序号为1的行的起始地址。a指向a[0],    a+1指向a[1]或者说a+1的值是a[1]的起始地址,a+2代表a[2]的起始地址,若a的值是2000,则a[2]的值是2032.  
  4. 若二维数组的首行起始地址为2000,一个整形数据占4个字节,即a的地址是2000,则a+1的值应该是2000+4*4=2016
  5. a[0],a[1],a[2]既然是一维数组名,从前面已知数组名代表数组首元素地址,因此a[0]代表一维数组a[0]中第0列元素的地址,即&a[0][0].同理a[1]的值是&a[1][0].
  6. 怎样表示a数组0行1列元素的地址?a[0]是一维数组名,该一维数组中农序号为1的元素的地址应该用a[0]+1来表示。
  7. int (*P)[4]表示定义一个指针,(*P)有四个元素,每个元素为整形。也就是P指向对象是有4个整形元素的数组,即P是指向一维数组的指针。

     (*p)[3]是p所指向的行中序号为3的元素。

  8. 总结:
    1. a[0]+0,  a[0]+1, a[0]+2, a[0]+3, 分别表示元素a[0][0],a[0][1],..a[0][3]的地址
    2. a指向a[0],    a+1指向a[1],a[0]代表一维数组a[0]中第0列元素的地址
    3. 一维数组中,a[0]和 *(a+0)等价,a[1]和*(a+1)等价,因此二维数组中a[0]+1和*(a+0)+1都是&a[0][1],即a[0]+1和*(a+0)+1都是地址。a[1]+2与*(a+1)+2都是&a[1]+2.
    4. 进一步分析,欲得到a[0][1]的值,用地址法怎么表示呢?
      1. 既然a[0]+1和*(a+0)+1等价,则:
      2. *(*(a+0)+1)就是a[0][1]的值;
      3. *(a[0]+1)也是a[0][1]的值;
      4. *(*a+1)也是a[0][1]的值;
      5. 总结:*(a+i)和a[i]是等价的。
  9. 二维数组a的有关指针总结              C语言指针学习笔记_第1张图片
  10.  
  11. 用指向数组的指针做函数参数

注意区别引用时average(*score)和search(score)两者加*和不加*的区别和含义

C语言指针学习笔记_第2张图片

 

 

 

 

你可能感兴趣的:(08-C语言学习,c语言,学习,笔记)