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(?)]
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.
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?
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!