Kezdőoldal » Számítástechnika » Programozás » Váltakozó hosszúságú argumentu...

Váltakozó hosszúságú argumentumlista gyakorlása közben problémáma bukkantam, mit lehetne javítani?

Figyelt kérdés

csak egy egyszerű függvényről lenne szó, ami összeadja a paraméterekbe belerakott integereket:


int sum(int a, ...) {


int *p = &a;

int ered = 0;


while (*p++) {

ered += *p;

}

return ered;


}

Ugye a függvény paraméterei egy stackben helyezkednek el, mintha vektor lenne, így elemi memóriában egymás utána helyezkednek el. Meghíváskor pl sum(5,4,3,2) 7 jegyű számot kapok[memóriacím(?)]



#mutató #argumentumlista
2016. nov. 11. 13:37
 1/8 anonim ***** válasza:
Nem tudok róla, hogy C-ben lenne ilyen. De ha eredendően egy int tömböt adsz át, akkor lényegében megoldva. :) Max a hosszából számolsz "paraméter" számot.
2016. nov. 11. 13:50
Hasznos számodra ez a válasz?
 2/8 anonim ***** válasza:

Van ilyen C-ben, olvasd inkább el, hogy hogy kell csinálni, mert nem így ahogy most csinálod.


[link]

2016. nov. 11. 13:57
Hasznos számodra ez a válasz?
 3/8 anonim ***** válasza:
Az elképzelés teljesen rossz, feltételezi, hogy random beadott értékek memóriacímei egymás után helyezkednek el, ami abszurd, kizárólag tömbnél vehető biztosra.
2016. nov. 11. 18:52
Hasznos számodra ez a válasz?
 4/8 anonim ***** válasza:
Még ha úgy is működne ahogy írtad (nem úgy működik általában), akkor is nonsense amit a while feltételébe írtál. Miért gondolod hogy a paraméterek után egy 0 van a memóriában? Ez nem string, itt nem tudod hogy hány elemet kapsz ezért meg kell azt mondani. Átadod az argumentumok számát, majd egy for ciklussal végig tudsz akkor menni a paramétereken. Nézd meg a linket amit fentebb linkeltek.
2016. nov. 11. 21:27
Hasznos számodra ez a válasz?
 5/8 A kérdező kommentje:
Most olvasva kommenteket és visszanézve kódra tényleg hülyeségnek néz ki A linket meglesem, köszi szépen:)
2016. nov. 12. 16:54
 6/8 A kérdező kommentje:

Remélem még valaki rálesik erre a kommentre:D

Csak hogy ne értsek valamit félre:

Szóval a va_list-tel létrehozunk egy listát ami tartalmazza az argumentumokat(annyit tud tárolni amennyi argumentum vna).

Ehhez kell még a va_start aminek 2 argumetuma van: a lista és a "..." előtti változó(gondolom ezzel tölt fel a listát).

va_arg:2 arg(lista, változó típus) a következő argot feltételezve hogy van .

Végén egy va_end ami kiüríti a listát.

2016. nov. 12. 17:29
 7/8 anonim ***** válasza:
Pongyolán fogalmazva igen.
2016. nov. 12. 22:14
Hasznos számodra ez a válasz?
 8/8 A kérdező kommentje:
,,pongyolán", a linkben leírtakat röviden leírtam.. Hogy írnád le igényesen?
2016. nov. 13. 01:15

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!