物聯網學習教程— 多維陣列與指標

千鋒教育官方發表於2019-08-26


用指標變數可以指向一維陣列中的元素,也可以指向多維陣列中的元素。但在概念上和使用上,多維陣列的指標比一維陣列的指標要複雜一些。

 

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 [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 [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 * _ 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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章