Sziasztok!
A problémám a következő: lácolt listát szeretnék implementálni C-ben, így létre szeretném hozni a következő típust:
typedef struct
{
int szam;
ELEM* kovetkezo;
} ELEM;
Azonban erre hibát dob a fordító. Ha viszont két lépésben csinálom meg, azaz így:
struct t_elem
{
int szam
struct t_elem* kovetkezo
};
typedef struct t_elem ELEM;
...akkor minden rendben, lefordul és jó. Azonban a kérdés adott: lehetne mégis ezt a dolgot egyben, nem pedig két lépésben megoldani?
Kicsit bagatell kérdés, tudom, de szeretnék választ kapni rá.
Válaszaitokat előre is köszönöm!
Üdvözlettel,
tloszk
- 5758 megtekintés
Hozzászólások
Valahogy igy..?
typedef struct _ELEM
{
int szam;
_ELEM* kovetkezo;
} *PELEM, ELEM;
----------------------
"ONE OF THESE DAYS I'M GOING TO CUT YOU INTO LITTLE PIECES!!!$E$%#$#%^*^"
- A hozzászóláshoz be kell jelentkezni
Amit te írtál, az nem fordul le. Helyesen:
typedef struct _ELEM {
int szam;
struct _ELEM* kovetkezo;
} ELEM;
- A hozzászóláshoz be kell jelentkezni
Jah, valszeg C++-ban ragadt ram...
----------------------
"ONE OF THESE DAYS I'M GOING TO CUT YOU INTO LITTLE PIECES!!!$E$%#$#%^*^"
- A hozzászóláshoz be kell jelentkezni
structnak ketszer kell nevet adni C-ben, egyszer a struktura szimbolumneve, masodszor a tipus neve.
A struct volt az elso dolog aminel nem lehetett meguszni a nevre hivatkozast hogy mit akarsz (intnel meg floatnal eleg ha a valtozo nevet tudod), es gondolom kesobb adtak hozza a typedef-et a C-hez.
De itt leirtak szebben: http://stackoverflow.com/questions/612328/difference-between-struct-and…
- A hozzászóláshoz be kell jelentkezni
typedef struct t_elem
{
int szam
struct t_elem* kovetkezo
} ELEM;
Tudom, igy sem az igazi, de ez van.
Meg egy aprosag: lancolt listaban int-et tarolni eleg nagy pazarlas. Nem feltetlenul akarod ezt :P
szerk: meg egy aprosag: ELEM helyett elem-nek hivnam. A csupa nagybetut fenntartanam a #define-os konstansoknak.
- A hozzászóláshoz be kell jelentkezni
--> lancolt listaban int-et tarolni eleg nagy pazarlas
Ezt kicsit bővebben kifejthetnéd.
- A hozzászóláshoz be kell jelentkezni
A mutató 32 bites rendszeren 32 bit azaz 4 byte. Az int szinten. Azaz egy int tarolásához elhasználsz még egyet. Ez így 100% felesleg. Ha mondjuk elemenként egy 32 elemű int tömböt teszel el plusz egy int -et ahol bitmaszkkal jelzed mely elem szabad, sokkal nagyobb értéket kapsz a hasznos/nyilvántartásra szánt byte-ok arányára.
- A hozzászóláshoz be kell jelentkezni
Jogos.
Az endogén lista ugrott be amikor olvastam a pazarlást,
valószínű arra gondolt Finder amit Te írtál.
- A hozzászóláshoz be kell jelentkezni
Ha azert csinalod, h tanulj belole, akkor nem szoltam, de ha munkahoz kell, akkor sokkal jobban jarsz a queue.h-val es thread/mutex kerdeskorrel.
---
pontscho / fresh!mindworkz
- A hozzászóláshoz be kell jelentkezni
Mindenkinek nagyon köszönöm a válaszokat! Talán gondolkodnom kellett volna először, mielőtt postolok... Egyébként tanulás célzatából csinálgattam ezt a kis dolgot. :)
- A hozzászóláshoz be kell jelentkezni
Ugyan a kérdés egy lépésben volt, de a helyesebb megoldás a több lépés. Első körben szükséged van egy előre hozott deklarációra, majd erre deklarálni kell egy pointert. (ezt így megeszi a C fordító, mivel a pointer méretét tudja, függetlenül attól, hogy mire mutat, mert annak a méretét majd csak később adod meg).
Több sorba szétszedés az olvashatóság miatt szükséges, és ugye a változónak helyet foglalni a header fájlban nem szokás, azaz úgyis szét kell szedned.
Javaslatom:
struct t_elem; <-- előre hozott deklaráció
typedef struct t_elem* p_elem; <-- pointert mindenre lehet deklarálni
struct t_elem {
int szam;
p_elem kovetkezo;
};
p_elem lista_gyokere;
- A hozzászóláshoz be kell jelentkezni