物联网学习教程—多维数组与指针

188 阅读2分钟

  用指针变量可以指向一维数组中的元素,也可以指向多维数组中的元素。但在概念上和使用上,多维数组的指针比一维数组的指针要复杂一些。

  1.多维数组元素的地址

  先回顾一下多维数组的性质,可以认为二维数组是“数组的数组”,例:

  定义int a[3][4]={{1,3,5,7},{9,11,13,15},{17,19,21,23}};

  则二维数组a是由3个一维数组所组成的。设二维数组的首行的首地址为2000,则

  

  #include<stdio.h>

  #define FROMAT″%d,%d\n″

  void main()

  {inta[3][4]={1,3,5,7,9,11,13,

  15,17,19,21,23};

  printf(FORMAT,a,*a);

  printf(FORMAT,a[0],*(a+0));

  printf(FORMAT,&a[0],&a[0][0]);

  printf(FORMAT,a[1],a+1);

  printf(FORMAT,&a[1][0],*(a+1)+0);

  printf(FORMAT,a[2],*(a+2));

  printf(FORMAT,&a[2],a+2);

  printf(FORMAT,a[1][0],(a+

  1)+0));

  }

  某一次运行结果如下:

  158,158(0行首地址和0行0列元素地址)

  158,158(0行0列元素地址)

  158,158(0行0首地址和0行0列元素地址)

  166,166(1行0列元素地址和1行首地址)

  166,166(1行0列元素地址)

  174,174(2行0列元素地址)

  174,174(2行首地址)

  9,9(1行0列元素的值)

  指向多维数组元素的指针变量

  (1)指向数组元素的指针变量

  例如:用指针变量输出二维数组元素的值

  #include<stdio.h>

  void main()

  {inta[3][4]={1,3,5,7,9,11,13,15,17,19,21,23};

  int*p;

  for(p=a[0];p<a[0]+12;p++)

  {if((p-a[0])%4==0)

  printf(″\n″);

  printf(″%4d″,*p);}

  }

  (2)指向由m个元素组成的一维数组的指针变量

  例:出二维数组任一行任一列元素的值

  #include<stdio.h>

  void main()

  {inta[3][4]={1,3,5,7,9,11,

  13,15,17,19,21,23};

  int(*p)[4],i,j;

  p=a;

  scanf(″i=%d,j=%d″,&i,&j);

  printf(″a[%d,%d]=%d\n″,i,

  j,(p+i)+j));

  }

  3.用指向数组的指针作函数参数

  例:有一个班,3个学生,各学4门课,计算总平均分数以及第n个学生的成绩。这个题目是很简单的。只是为了说明用指向数组的指针作函数参数而举的例子。用函数average求总平均成绩,用函数search找出并输出第i个学生的成绩。

  #include<sydio.h>

  void main()

  {void average(float*p,int n);

  void search(float(*p)[4],int n);

  float score[3][4]={{65,67,70,60},{80,

  87,90,81},{90,99,100,98}};

  average(*score,12);/求12个分数的平均分

  search(score,2);/求序号为2的学生的成绩

  }

  void average(float*p,intn)

  {float*p_end;

  float sum=0,aver;

  p_end=p+n-1;

  for(;p<=p_end;p++)

  sum=sum+(*p);

  aver=sum/n;

  printf(″average=%5.2f\n″,aver);

  }

  void search(float(*p)[4],intn)

  /p是指向具有4个元素的一维数组的指针/{inti;

  printf(″the score of No.%dare:\n″,n);

  for(i=0;i<4;i++)

  printf(″%5.2f″,(p+n)+i));

  }

  程序运行结果如下:

  average=82.25

  The score of No.2 are:

  90.0099.00100.0098.00