Ugrás a tartalomhoz

C-style array

A Wikiszótárból, a nyitott szótárból


Főnév

C-style array (tsz. C-style arrays)

  1. (informatika) A C-style array (vagy magyarul „C-stílusú tömb”) a C és C++ programozási nyelv egyik legegyszerűbb és legalapvetőbb adattípusa. Ez egy olyan adatszerkezet, amely azonos típusú elemeket tárol fix hosszúságú, egymás után elhelyezett memóriaterületen. A C++ modern szabványai (pl. C++11-től std::array és std::vector) ugyan kényelmesebb alternatívát nyújtanak, de a C-style array továbbra is fontos szerepet játszik alacsony szintű programozásban és interfészekben.



📌 Szintaxis

TombTipus nev[meret];

Például:

int tomb[5]; // 5 elemű egész számokat tartalmazó tömb

⚙️ Inicializálás

int tomb[3] = {1, 2, 3};
char szoveg[] = {'H', 'e', 'l', 'l', 'o', '\0'}; // karakterlánc

Ha kevesebb elemet adsz meg, a maradék 0-val lesz feltöltve:

int t[5] = {1}; // => {1, 0, 0, 0, 0}

🧮 Hozzáférés

Indexelés 0-tól indul:

tomb[0] = 42;
int x = tomb[2];

⚠️ Jellemző tulajdonságok

Tulajdonság Részletek
Fix méret A méret fordítási időben ismert, nem változtatható.
Nem biztonságos indexelés Nincs határellenőrzés (tomb[999] akár segfault).
Pointerként kezelhető A tömb neve az első elemre mutató pointerként működik.
Nem másolható közvetlenül tomb2 = tomb1; nem működik.
Memória Stack-en helyezkedik el (alapértelmezés szerint).



🧠 Tömb és pointer kapcsolata

int tomb[4] = {10, 20, 30, 40};
int* p = tomb;        // p ugyanarra a címre mutat
int x = *(p + 2);     // x == 30

A tomb neve egy int*, amely tomb[0] címére mutat.



🔄 Iterálás

for (int i = 0; i < 5; ++i)
    std::cout << tomb[i] << std::endl;

🧩 Tömb mint paraméter

void kiir(const int tomb[], int meret) {
    for (int i = 0; i < meret; ++i)
        std::cout << tomb[i] << " ";
}

Valójában int tomb[] és int* tomb ugyanaz a típusként:

void kiir(const int* tomb, int meret);

🧨 Gyakori hibák

  • Méret elvesztése függvényhíváskor:

    void f(int t[]) {
        sizeof(t); // => nem adja vissza az eredeti tömb méretét!
    }
    
  • Véletlen túlcímzés (tomb[5] 5 elemű tömbnél).



🧠 Méret meghatározása

int t[10];
std::size_t meret = sizeof(t) / sizeof(t[0]);

De ez CSAK azon a helyen működik, ahol a tömb valódi tömb, nem pointer.



✅ Alternatívák modern C++-ban

Alternatíva Leírás
std::array<T, N> Fix méret, típusbiztos, STL-kompatibilis
std::vector<T> Dinamikus méret, automatikus memória-kezelés
std::span<T> Nem birtokló, biztonságos hozzáférés C++20-tól



🧪 Példa

#include <iostream>

int main() {
    int szamok[5] = {1, 2, 3, 4, 5};

    for (int i = 0; i < 5; ++i)
        std::cout << szamok[i] << ' ';

    return 0;
}

🧵 Összefoglalás

  • A C-style array egyszerű, de veszélyes, mivel nincs határellenőrzés.
  • Jó választás lehet alacsony szintű vagy performance-kritikus kódhoz.
  • Modern C++-ban inkább std::array, std::vector vagy std::span használata ajánlott.
  • Használatakor mindig tartsd észben: a méretet nem viszi magával!