Kezdőoldal » Számítástechnika » Programozás » Lehetséges ilyen függvényeket...

Lehetséges ilyen függvényeket írni c-ben?

Figyelt kérdés

Létezik olyan függvény, mely több értéket ad vissza.


Eddig olyanokat tanultunk, melyeknek csak egy visszatérési értéke van (pl kiszámolja két szám összegét és az összeggel tér vissza).


Lehet olyan csinálni, hogy akár 3 értékkel térjen vissza egyszerre? Olvasgattam angol fórumokat, de ott pointerekkel oldották meg olyat meg még nem tanultunk.


Pl return a, b, c;


A másik kérdésem, hogy van-e olyan függvény, aminek bemeneti paramétere egy másik függvény?

pl float atlag(int osszeg(int a; int b))

{

....


return atlag;

}



2015. nov. 9. 15:08
 1/3 anonim ***** válasza:

Első kérdésedre: például ha tömböt adsz visszatérési értékként:

[link]

igaz, ez pointereket igényel.


Vagy struct-tot:

[link]

2015. nov. 9. 15:27
Hasznos számodra ez a válasz?
 2/3 anonim ***** válasza:
100%

A visszatérési értékben csak egy valami lehet. A szokásos módszer a paraméterként átadott mutató (pointer). Van lehetőség arra a static kulcsszóval hozz létre tömböt és azt add vissza vagy egy struktúrába rakd az értékeket, de mind a kettő módszerrel vannak problémák.


A static tömb minden alkalommal felülíródik amikor meg lesz hívva, nem biztonságos a használata. Sok régebbi fordító pedig nem támogatja a regiszternél nagyobb méretű adatok visszatérését, így a legtöbb struktúráét sem. Modern fordítók már memcpy-vel lemásolják az adatot, de ezt nem lehet általánosságban elmondani, jobb nem használni.


Jó hír viszont hogy használtál már pointert, és pointert váró függvényt! Erre jó példa a scanf(). Van visszatérési értéke, de amellett a paraméterben átadott változókat tölti inkább fel, például:


int szam1, szam2;

//scanf visszateresi erdeke a sikeresen beolvasott adatok szama

if(scanf("%d %d", &szam1, &szam2) != 2)

. . print("Nem sikerult a beolvasas!\n");


Mutatok példát a static tömb hibájára is és arra, hogy mennyivel egyszerűbb pointereket használni:


#include <stdio.h>


//osszeg es szorzat visszaadasa tombbel

int* osszegSzorzat1(int a, int b) {

. . static int ret[2];

. . ret[0] = a + b;

. . ret[1] = a * b;


. . return ret;

}


//a pointeres valtozat

void osszegSzorzat2(int a, int b, int* osszeg, int* szorzat) {

. . *osszeg = a + b;

. . *szorzat = a * b;

}


int main(void) {

. . int* ret1 = osszegSzorzat1(2, 3);

. . int* ret2 = osszegSzorzat1(3, 4); //felülírja a ret1-et!!

. . printf("Osszeg1: %d, Szorzat1: %d\n", ret1[0], ret1[1]); //7, 12

. . printf("Osszeg2: %d, Szorzat2: %d\n", ret2[0], ret2[1]); //7, 12


. . int osszeg, szorzat;

. . osszegSzorzat2(4, 5, &osszeg, &szorzat);

. . printf("Osszeg3: %d, Szorzat3: %d\n", osszeg, szorzat); //9, 20


. . return 0;

}



Végül pedig igen, át lehet adni függvényt is paraméterként:


int osszeg(int a, int b) {

. . return a + b;

}


float atlag(int (*fuggveny)(int,int), int a, int b) {

. . return (*fuggveny)(a, b) / 2.0f;

}


int main(void) {

. . printf("Atlag: %f\n", atlag(&osszeg, 4, 6));


. . return 0;

}

2015. nov. 9. 17:04
Hasznos számodra ez a válasz?
 3/3 A kérdező kommentje:
Köszönöm szépen. Utolsónak főleg most már mindent értek.
2015. nov. 10. 10:32

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!