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


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

 

1.  多维数组元素的地址

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

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

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

物联网学习教程— 多维数组与指针_第1张图片

 

#include

define  FROMAT  ″%d,%d\n″

void main ()

int [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

void main ()

int [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

void  main ( )

int a[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

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, int n)

{ float * _ 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 (* )[4] int n)

             / * p 是指向具有 4 个元素的一维数组的指针 */ int i;

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

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

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

   

程序运行结果如下:

average =82.25

The  score  of  No.2  are

90. 00 99 . 00 100 . 00 98 . 00

 


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/69914734/viewspace-2654976/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/69914734/viewspace-2654976/

你可能感兴趣的:(物联网学习教程— 多维数组与指针)