A tömb egy memóriahely, amelyek azonos típusú elemeket tárol. A tömb adott helyére vagy elemére való hivatkozásként megadjuk a tömb nevét és az adott elem pozíciószámát a tömbben.
Tömbök deklarálása
A tömb elemek bármelyikére hivatkozhatunk úgy, hogy a tömb neve melletti szögletes zárójelben [] adjuk meg az adott elem pozíciójának számát. A pozíció számát indexnek hívjuk, ez a szám határozza meg az elem tömb elejétől számított helyét. Az első elem indexe 0 (nulla). A char típusú tömb deklarálásakor az inicializálásnál még egy elemre van szükség a szükséges null karakter jelzi a tömb végét.
A tömbök helyet foglalnak el a memóriában. A tömb típusa és az elemeinek a száma meghatározza a lefoglalt memoria mennyiségét. Figyeljünk fokozottan a tömbök deklarálásakor, hogy a tömb mérete elegendő legyen a benne tárolando elemek számára. A fordító lefoglalja a megfelelő memóriamennyiséget. Az alábbi példában lefoglalunk a memoriában a myIntArray nevű 4 elemű tömb számára elegendő területet.
type arrayName[arraySize];
int myIntArray[4]; // 4 elemű int tipusú tömb
A tömb métete (arraySize) állandó, nullánál nagyobb egész szám.
const int arraySize = 4;
int myIntArray[arraySize];
Adhatunk értéket is a deklarálással egyidőben. Ebben a példában bevezetjük a myIntArray nevű int típusú tömböt és feltöltjük 4 elemmel, ebben az esetben számmal. Így is le lesz foglalva a megfelelő mennyiségű memoria.
int myIntArray[] = {1,2,3,4};
Műveletek a tömbökkel
A tömb elemeihez az indexükkel hivatkozhatunk. Például a myIntArray tömb harmadik elemét a 2. indexen találjuk.
int myIntArray[] = {1,2,3,4};
Serial.println(myIntArray[2]);
A konzolra kiírja: 3
Egy for ciklussal kiírathatjuk a tömb összes elemét.
int myIntArray[] = {1,2,3,4};
for ( int i = 0; i < 4; ++i )
{
Serial.print(myIntArray[i]);
Serial.print (", ") ;
}
A kimenet a következő lesz: 1, 2, 3, 4,
Végezhetünk műveleteket is a tömb elemeivel.
int myIntArray[] = {1,2,3,4};
Serial.println(myIntArray[0] + myIntArray[2]);
Serial.println(myIntArray[3] - myIntArray[1]);
Serial.println(myIntArray[3] * myIntArray[1]);
Serial.println(myIntArray[3] / myIntArray[1]);
Serial.println(myIntArray[3] % myIntArray[2]);
De használhatunk ciklust is.
int myIntArray[] = {1,2,3,4};
int sum = 0;
for ( int i = 0; i < 4; ++i )
{
sum += myIntArray[i];
}
Serial.println(sum);
Az eredmény a konzolon 10 lesz.
A többdimenziós tömbök
A két- vagy több- dimenziós tömbök gyakran táblázatok értékeit tárolják, amelyek sorokban és oszlopokban rendezett információkból állnak. Egy adott táblaelem azonosításához két indexet kell megadnunk. Az első azonosítja az elem sorát (row), a második pedig az elem oszlopét (column). Azokat a tömböket, amelyekhez két index szükséges egy adott elem azonosításához, kétdimenziós tömbnek vagy 2-D tömbnek nevezzük. A két vagy több dimenziós tömböket multidimenziós tömböknek is nevezhetjük.
Lássunk egy példát.
const int rows = 2;
const int cols = 3;
int myIntArray[rows][cols] = {
{1,2,3},
{4,5,6}
};
myIntArray[0][0] ==> 1 | myIntArray[0][1] ==> 2 | myIntArray[0][2] ==> 3 |
myIntArray[1][0] ==> 4 | myIntArray[1][1] ==> 5 | myIntArray[1][2] ==> 6 |
Létrehozhatunk stringet egy karakterlánc tömbbel. Ezeket az alábbi példák szerint lehet deklarálni, mindegyik érvényes. A karaktertömbök utolsó eleme a 0 (nulla), innen ismeri fel a fordító a string végét.
char Str1[15];
char Str2[8] = {'a', 'r', 'd', 'u', 'i', 'n', 'o'};
char Str3[8] = {'a', 'r', 'd', 'u', 'i', 'n', 'o', 'char Str1[15];
char Str2[8] = {'a', 'r', 'd', 'u', 'i', 'n', 'o'};
char Str3[8] = {'a', 'r', 'd', 'u', 'i', 'n', 'o', '\0'};
char Str4[ ] = "arduino";
char Str5[8] = "arduino";
char Str6[15] = "arduino";
'};
char Str4[ ] = "arduino";
char Str5[8] = "arduino";
char Str6[15] = "arduino";
Karaktereket aposztrofok közé írhatunk a tömbökbe.
char myArray[2][5] = {
{'A','B','C','D'},
{'1','2','3','4'}
};
A karakterláncokkat idézőjelek közé kell tenni.
const int rows = 4;
const int cols = 5;
char myCharArray[rows][cols] = {
"row1",
"row2",
"row3",
"row4"
};
void setup()
{
Serial.begin(115200);
Serial.println(myCharArray[3][3]); // console => 4
}
void loop(){}
Ha beír egy karakterláncot a tömbbe, hivatkozhat a karakterekre az indexükkel. A for ciklussal kinyomtathatjuk a tömb tartalmát a konzolra.
const int rows = 4;
const int cols = 5;
char myCharArray[rows][cols] = {
"row1",
"row2",
"row3",
"row4"
};
void setup()
{
Serial.begin(115200);
for ( int i = 0; i < 4; ++i )
{
for (int j = 0; j < 4; j++)
{
Serial.print(myCharArray[i][j]);
}
}
}
void loop(){}
Hosszabb szövegeket is tárolhatunk tömbben.
char myString[] =
"Első sor"
"Második sor"
"Harmadik";
Serial.println (myString[7]);
Egyenlőre ennyit a tömbökről. Lapozz tovább, és a karakterláncokról megtudhatsz még pár érdekességet.