Kezdőoldal » Számítástechnika » Programozás » Hogy kell függvényt deklarálni...

Hogy kell függvényt deklarálni és meghívni C-ben?

Figyelt kérdés

Nem értem, hogy mi kerül a zárójelen belülre.

Miért más amikor meghívjuk mint amikor deklaráljuk.

pl itt deklarálom:


int fuggveny(int *valami, int **megvalami)


itt meg meghívom:


fuggveny(&valami, *megvalami)


Nem értem, hogy mikor mitől függ, hogy használunk-e pointert, vagy címoperátort.

Vagy épp dupla pointert.

És, hogy ez hogyan változik meghíváskor, deklaráláskor, vagy a "kifejtésnél".


Segítsetek légyszi. Egyszerűen nem tudok továbbmenni amíg ezt nem értem. :(


Kérlek csak akkor válaszolj, ha tényleg valami értelmes mondanivalód van. Ha nem vagy otthon a témába, és fingod nincs a programozáshoz (mondom én) akkor kérlek ne trollkodj :)



2020. febr. 25. 16:06
 1/8 anonim ***** válasza:
75%

Ahhoz, hogy meghívhasd a függvényt, előbb deklarálnod kell.

Ahogy a változókat is.

Ez nem neked kell, hanem a fordítónak, hogy hozzá tudjon rendelni a függvény belépési pontjához egy memóriacímet. Így a meghíváskor bárhonnan is van meghívva a függvény, tudni fogja hova kell ugrani. Ezért a deklaráció.


A pointeres kérdés elég messzire vezet, arra ilyen röviden nem lehet válaszolni.

2020. febr. 25. 16:16
Hasznos számodra ez a válasz?
 2/8 A kérdező kommentje:

Tudnál valami linket küldeni ahol ez részletesen le van írva? Rengeteget talátam már de egyik sem volt részletes.

Mind azt írja, hogy a zárojelen belülre kerülnek a paraméterek... De az mit takar, hogy paraméter?

2020. febr. 25. 16:21
 3/8 anonim ***** válasza:

Egy függvény, az nem más, mint egy alprogram ami csinál valamit. Mondjuk összead két számot.

A függvénynek valahogy oda kell passzolni azt a két számot, amivel műveletet végez. Erre kell a paraméter, ami nem más, mint az összeadandó számok.

A függvénynek ezen túl van egy olyanja, hogy visszatérési érték. Ez az az érték, amit a függvény kiszámol (esetünkben összead), ha meghívják. Ennek tipusát a függvény deklarációs részében definiálni kell. Mondjuk esetünkben ez integer.

Pszeudóban, kb az alábbi.


Deklaráció:


integer I;

Integer Fuggveny(a,b: integer);


Itt az első integer a függvény tipusa, az a és a b pedig a feldolgozandó (összeadandó) számok, amelyek szintén integer tipusúak.


Ha pedig meghívod, akkor így néz ki:


I = Fuggveny(34,65);


Ahol I megint egy integer, amibe a függvény által kiszámolt érték (99) kerül. A 34 és a 65 meg a két összeadandó.

2020. febr. 25. 16:36
Hasznos számodra ez a válasz?
 4/8 anonim ***** válasza:

[link]


Itt eléggé érthetően le van írva minden

2020. febr. 25. 20:14
Hasznos számodra ez a válasz?
 5/8 anonim ***** válasza:
52%

Amikor deklarálsz egy függvényt, akkor a zárójelen belül a paramétereket adod meg. A "kifejtés" az megint más, van, hogy külön deklarálsz és definiálsz egy függvényt, de lehet egyből definíciót adni, szerintem az a könnyebb eset, most vegyük azt.


A "paraméter" az egy olyan dolog, aminek nincs konkrét értéke, majd akkor lesz, ha meghívod a függvényt. Amiket ekkor átadsz neki, az az "argumentum". Itt ez a paraméter, matekból: sin(x)


--"És, hogy ez hogyan változik meghíváskor, deklaráláskor"


Talán egy másik nézőpont segíteni fog (nem biztos, hogy mindenki így gondolja, de hátha megérted).

Szerintem nálad az a baj, hogy nem a különbség kavar meg, hanem a hasonlóság. A deklarációnak és a hívásnak nem sok köze van egymáshoz; hasonlóan néznek ki. Mondhatnám úgy is, hogy "az a zárójel, az nem az a zárójel". Könnyebb lesz egy pointeres példa, ott nincs még az sem:


int *x = 0;

if (x == 0); // igaz

*x = 5; // runtime error


Az első csillag azt jelzi, hogy pointer típusú változóról van szó.

A második csillag a "dereference operator", azzal egy műveletet végzel.

Az első esetben nem tehetsz mindenféle operátort, amit akarsz, mert nem lehet:


int *&x = 0; // szintaktikai hiba

*&x = 0; // működik


Lehetne így is az egész:


int pointer x = 0;

*x = 5;


Nincs két csillag, nincs félreértés sem.

2020. febr. 25. 22:37
Hasznos számodra ez a válasz?
 6/8 A kérdező kommentje:

Értem köszi. Már egy kicsit közelebb vagyok a megoldáshoz. Mármint, hogy megértsem.

De ha nem baj akkor vegyünk egy konkrét példát.


Mondjuk szeretném létrehozni a 'fuggveny.txt' nevu filet, amibe mondjuk a 'c' változó értékét írjuk.


Én így állnék neki:


int main(){


int c=5;

//itt hívom meg:


fuggveny(ide kerül valamilyen formában a 'c'. De milyen formában?);


}



void fuggveny(és ide?)

}

FILE *fPointer=fopen("fuggveny.txt"."w"");

fprintf("fuggveny\n");

}

2020. febr. 27. 15:59
 7/8 A kérdező kommentje:
a printf-ből kimaradt a pointer...
2020. febr. 27. 16:02
 8/8 anonim ***** válasza:

Hát mivel itt nincs semmilyen pointer, ezért simán:


f(c);


f(int c) { ... }

2020. márc. 1. 22:39
Hasznos számodra ez a válasz?

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!