array

[Adattípusok]

Leírás

Az array (tömb) olyan változók gyűjteménye, amelyekhez indexszámmal lehet hozzáférni. Az Arduino vázlatokban a C++ programozási nyelvű tömbök bonyolultak lehetnek, de az egyszerű tömbök használata viszonylag könnyű.

Tömb létrehozása (deklarálása)

Az alábbi módszerek mindegyike érvényes módja egy tömb létrehozásának (deklarációjának).

  int myInts[6];
  int myPins[] = {2, 4, 8, 3, 6};
  int mySensVals[5] = {2, 4, -8, 3, 2};
  char message[6] = "hello";

Egy tömböt deklarálhat inicializálás nélkül, mint a myInt-ben.
A myPins-ben deklarálunk egy tömböt anélkül, hogy kifejezetten megválasztanánk a méretet. A fordító megszámolja az elemeket, és létrehoz egy megfelelő méretű tömböt.
Végül inicializálhatja és méretezheti a tömböt, mint a mySensVals-ban. Vegye figyelembe, hogy egy char típusú tömb deklarálásakor az inicializálásnál eggyel több elem szükséges a kötelező nulladik karakter megtartásához.

Hozzáférés egy tömbhöz

A tömbök nulla indexeltek, vagyis a fenti tömb inicializálásra hivatkozva a tömb első eleme 0 indexű, tehát

mySensVals[0] == 2, mySensVals[1] == 4, és így tovább.

Ez azt is jelenti, hogy egy tíz elemű tömbben a kilences index az utolsó elem. Ennélfogva:

int myArray[10]={9, 3, 2, 4, 3, 2, 7, 8, 9, 11};
// myArray[9]    11-et tartalmaz
// myArray[10]   érvénytelen és véletlenszerű információt tartalmaz (más memóriacím)

Emiatt óvatosnak kell lennie a tömbök elérésekor. Egy tömb végén túli elérése (amely a deklarált tömb mérete -1-nél nagyobb indexszámot használ) olyan memóriából olvas, amelyet más célokra használnak. Az ezekről a helyekről való olvasás valószínűleg nem sok mindenhez vezet, kivéve, hogy érvénytelen adatokat eredményez. A véletlenszerű memóriahelyekre való írás határozottan rossz ötlet, és gyakran szerencsétlen eredményekhez, például összeomláshoz vagy programhibákhoz vezethet. Ez is egy nehezen felderíthető hiba lehet.

A BASIC-kel vagy JAVA-val ellentétben a C++ fordító nem ellenőrzi, hogy a tömbhozzáférés a megadott tömbméret törvényes határain belül történt-e.

Érték hozzárendelése egy tömbhöz:

mySensVals[0] = 10;

Érték lekérése tömbből:

x = mySensVals[4];

Tömbök és FOR ciklusok

A tömböket gyakran a ciklusok belsejében kezelik, ahol a ciklusszámlálót használják indexként minden tömbelemhez. Ha például egy tömb elemeit a soros porton keresztül szeretné kinyomtatni, akkor valami ilyesmit tehet:

for (byte i = 0; i < 5; i = i + 1) {
  Serial.println(myPins[i]);
}

Példa

A tömbök használatát bemutató teljes programért lásd a Knight Rider példát a Beépített példák részben.

Lásd még