99re热这里只有精品视频,7777色鬼xxxx欧美色妇,国产成人精品一区二三区在线观看,内射爽无广熟女亚洲,精品人妻av一区二区三区

Arduino 多維數(shù)組

2018-11-10 14:57 更新

具有兩個維度(即,下標(biāo))的數(shù)組通常表示由排列在行和列中的信息組成的值的表格。

以下是多維數(shù)組的關(guān)鍵特性:

  • 為了識別特定的表格元素,我們必須指定兩個下標(biāo)。

  • 按照慣例,第一個標(biāo)識元素的行,第二個標(biāo)識元素的列。

  • 需要兩個下標(biāo)來標(biāo)識特定元素的數(shù)組稱為二維數(shù)組或2D數(shù)組。

  • 具有兩個或多個維度的數(shù)組稱為多維數(shù)組,并且可以具有多于兩個維度。

下圖說明了一個二維數(shù)組 a 。該數(shù)組包含三行四列,因此它是一個3乘4的數(shù)組。通常,具有 m 行和 n 列的數(shù)組稱為 m乘n數(shù)組。


m-by-n數(shù)組

數(shù)組 a 中的每個元素都由 a[i][j] 形式的元素名稱標(biāo)識。這里,a是數(shù)組的名稱, i j  a 中唯一標(biāo)識每個元素的下標(biāo)。注意,行0中的元素的名稱都有第一下標(biāo)0;第3列中的元素的名稱都有第二下標(biāo)3。

多維數(shù)組可以在其聲明中初始化,就像一維數(shù)組一樣。例如,一個二維數(shù)組 b 在其第0行元素中的值為1和2,在第1行元素中的值為3和4,可以被聲明和初始化如下:

int b[ 2 ][ 2 ] = { { 1, 2 }, { 3, 4 } };

這些值按大括號中的行分組。因此,1和2分別初始化b[0][0]和b[0][1],而3和4分別初始化b[1][0]和b[1][1]。如果對于給定行沒有足夠的初始化器,則該行的剩余元素被初始化為0。因此,以下聲明將b[0][0]初始化為1,b[0][1]初始化為0,b[1][0]初始化為3和b[1][1]初始化為4。

int b[ 2 ][ 2 ] = { { 1 }, { 3, 4 } };

例子

下面是一個演示在聲明中初始化二維數(shù)組的例子。

  • 行a-c聲明三個數(shù)組,每個數(shù)組有兩行和三列。

  • array1(行a)的聲明在兩個子列表中提供了六個初始化器。第一個子列表將數(shù)組的第0行初始化為值1,2和3;第二個子列表將數(shù)組的第1行初始化為值4,5和6。

  • 如果將每個子列表的大括號從array1初始化器列表中移除,那么編譯器將初始化第0行的元素,然后是第1行的元素,產(chǎn)生相同的結(jié)果。

  • array2(行b)的聲明只提供了5個初始化器。

  • 初始化器分配給第0行,然后分配給第1行。任何沒有顯式初始化器的元素都將被初始化為零,因此array2[1][2]初始化為零。

  • array3(行c)的聲明在兩個子列表中提供了三個初始化器。

  • 第0行的子列表明確地將第0行的前兩個元素初始化為1和2;第三個元素被隱式地初始化為零。

  • 第1行的子列表明確地將第一個元素初始化為4,并隱式地將最后兩個元素初始化為零。

  • 程序調(diào)用函數(shù)print Array來輸出每個數(shù)組的元素。請注意,函數(shù)原型(行k)指定了參數(shù) const int a[][columns] 。

  • 當(dāng)函數(shù)接收到一維數(shù)組作為參數(shù)時,函數(shù)的參數(shù)列表中的數(shù)組括號是空的。

  • 二維數(shù)組的第一維度(即,行數(shù))的大小也不是必需的,但是所有后續(xù)的維度大小都是必需的。編譯器使用這些大小來確定多維數(shù)組中元素的內(nèi)存位置。

  • 無論維數(shù)如何,所有數(shù)組元素都連續(xù)存儲在內(nèi)存中。在二維數(shù)組中,第0行存儲在內(nèi)存中,隨后是第1行。

例子

void printArray ( const int [][ 3 ] ); // prototype
const int rows = 2;
const int columns = 3;
int array1[ rows ][ columns ] = { { 1, 2, 3 }, { 4, 5, 6 } };
int array2[ rows ][ columns ] = { 1, 2, 3, 4, 5 };
int array3[ rows ][ columns ] = { { 1, 2 }, { 4 } };

void setup () {

}
void loop () {
   Serial.print ("Values in array1 by row are: ") ;
   Serial.print (“\r" ) ;
   printArray(array1) ;
   Serial.print ("Values in array2 by row are: ") ;
   Serial.print (“\r" ) ;
   printArray(array2) ;
   Serial.print ("Values in array3 by row are: ") ;
   Serial.print (“\r" ) ;
   printArray(array3) ;
}

// output array with two rows and three columns

void printArray( const int a[][ columns ] ) {
   // loop through array's rows
   for ( int i = 0; i < rows; ++i ) {
      // loop through columns of current row
      for ( int j = 0; j < columns; ++j )
      Serial.print (a[ i ][ j ] );
      Serial.print (“\r" ) ; // start new line of output
   } 
// end outer for
} 

// end function printArray

結(jié)果

Values in array1 by row are:
1 2 3
4 5 6
Values in array2 by row are:
1 2 3
4 5 0
Values in array3 by row are:
1 2 0
4 0 0

注意 - 每一行都是一維數(shù)組。要定位特定行中的元素,函數(shù)必須準(zhǔn)確知道每行中的元素數(shù)量,以便在訪問數(shù)組時可以跳過適當(dāng)數(shù)量的內(nèi)存位置。因此,當(dāng)訪問a[1][2]時,函數(shù)知道跳過內(nèi)存中第0行的三個元素到達(dá)第1行。然后,函數(shù)訪問該行的元素2。許多常見的數(shù)組操作使用 FOR 語句。

例如,以下 FOR 語句設(shè)置數(shù)組 a 第2行中的所有元素。

for ( int column = 0; column < 4; ++column )
   a[ 2 ][ column ] = 0;

FOR 語句只改變第二個下標(biāo)(即,列下標(biāo))。前面的 FOR 語句等同于以下賦值語句:

a[ 2 ][ 0 ] = 0;
a[ 2 ][ 1 ] = 0;
a[ 2 ][ 2 ] = 0;
a[ 2 ][ 3 ] = 0;

以下嵌套FOR 語句確定數(shù)組 a 中所有元素的總和:

total = 0;
for ( int row = 0; row < 3; ++row )
for ( int column = 0; column < 4; ++column )
total += a[ row ][ column ];

FOR 語句一次一行地將數(shù)組的元素加總在一起。外部 FOR 語句首先將行(即,行下標(biāo))設(shè)置為0。因此,第0行的元素可以由內(nèi)部 FOR 語句進(jìn)行合計。

外部 FOR 語句然后將行增加到1,這樣,可以對第1行的元素進(jìn)行合計。然后,外部 FOR 語句將行增加為2,這樣,可以對第2行的元素進(jìn)行合計。當(dāng)嵌套的 FOR 語句終止時,總數(shù)包含所有數(shù)組元素的和。



以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號