Valaki meg tudná nekem magyarázni ennek az egyszerű C++ példának a lényegét?
#include <iostream>
using namespace std;
void tombkiir (int arg[], int length) {
for (int n=0; n<length; n++)
cout << arg[n] << " ";
cout << "\n";
}
int main ()
{
int tomb1[] = {5, 10, 15};
int tomb2[] = {2, 4, 6, 8, 10};
tombkiir (tomb1,3);
tombkiir (tomb2,5);
return 0;
}
Ezt nem értem:
"void tombkiir (int arg[], int length)" Oké, egy függvényt kezd, de mi az a void, hogy jött ide arg[], és miért/hogy lehet egyáltalán a zárójelen belülre inteket írni? (Bocsánat a béna kérdésekért, ez az első találkozásom a C++ függvényekkel.)
Azt sejtem, hogy ebben "tombkiir (tomb1,3);" adta meg az arg tömb elemeit és a hosszát, jól gondolom?
Az általad kiemelt sor a függvény szignatúrája. Itt írod le, hogy milyen típusú paraméterei vannak a tömbnek (egy int tömb típusú "arg" nevű, és egy int típusú "length" nevű), illetve hogy milyen típusú értékkel tér vissza a függvény (itt most void, ami azt jelenti, hogy nincs visszatérési értéke).
Tehát azért írkálhatsz ide "inteket", mert ez itt nem függvényhívás, hanem a függvény definíciója.
A tombkiir(tomb1, 3); pedig a függvény egyik meghívása, ahol megkapja a paramétereit.
A tomb1 lesz a függvényen belül az arg, a 3 pedig a length.
Na sikerült elírnom. :D
Szóóóval az első sorom javítva:
"Az általad kiemelt sor a függvény szignatúrája. Itt írod le, hogy milyen típusú paraméterei vannak a _függvénynek_ ..."
A függvény neve előtt írjuk le, hogy milyen típust fog visszaadni. Ha nem kell semmit visszaadnia, akkor írunk void-ot. Jelen esetben ez egy kiíró függvény, semmilyen visszatérő értékre nincs szükségünk.
(Vigyázz, ne keverd össze a void* -gal!)
Az "int arg[]" a paraméterei közt azt jelenti, hogy egy int-ekből álló tömböt fog átvenni. Viszont a C-ben a tömböt egy mutatóval adjuk meg, ami az első elemére mutat. Ez azt jelenti, hogy ez:
int arg[]
ugyanaz, mint ez:
int * arg
vagyis egy int-re mutató pointer. Egy mutatót fog átvenni paraméterként, ami a tömb első elemére mutat. A függvény törzsében pedig az "agr[n]" azt jelenti, hogy az arg által mutatott helyhez képest hanyadik elemét akarjuk kiírni. Tehát az "arg[]" csak egy jelölésmód egy tömbhöz, ide a zárójelbe még nem is írhatunk értéket.
A szögletes zárójel valójában így látszik a fordító számára:
int arg[] ==> int * arg
arg[n] ==> *(arg + n * sizeof(int))
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!