ITPub博客

首页 > IT职业 > IT职场 > 物联网学习教程— 多维数组与指针

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

原创 IT职场 作者:千锋教育官方 时间:2019-08-26 16:06:18 0 删除 编辑


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

 

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 ()

{ int a [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 ()

{ int a [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 ( )

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

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

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

    printf (″ the score of  No. % d 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博客 ” ,链接:https://blog.itpub.net/69914734/viewspace-2654976/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
千锋IT职业教育——做真实的自己 用良心做教育

注册时间:2019-03-28

  • 博文量
    140
  • 访问量
    92347