Matematické Fórum

Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.

Nástěnka
22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.

Nejste přihlášen(a). Přihlásit

#1 11. 12. 2011 15:14 — Editoval milwoukee (11. 12. 2011 15:41)

milwoukee
Příspěvky: 158
Reputace:   
 

Dynamicka alokace Struct

Ahoj zarazil ma tento priklad: Nataham si niekolko riadkov zo suboru , a postupne ich parsujem , v kazdom riadku Person je Meno:Priezvysko:Vaha a nasledne tieto osoby napchat do struktury person avsak musim ju dynamicky naalokovat , vie mi niekto poradit ci to je dobre?

struct Person{
        char*name;
        char*surname;
        int weight;
    }person[num];

person[x]=malloc(sizeof(struct Person));

alebo najprv treba alokovat name aj surname ? Dakujem
A ci je ta moja malloc dobre lebo pochybujem :)
A este jedna otazka, musim si vzdy alokovat aj name a surname alebo to uz obsahuje ta alokacia struktury?

Offline

 

#2 13. 12. 2011 02:52 — Editoval RePRO (13. 12. 2011 03:44)

RePRO
Místo: Jihlava
Příspěvky: 363
Škola: AI VŠPJ (09-12, Bc.)
Pozice: programátor
Reputace:   11 
Web
 

Re: Dynamicka alokace Struct

Zdravím,
dají se použít základní dva zápisy - s typedef a bez typedef (možná i více, ale uvedu základní dva).

1]

Code:

struct Person {
        char name[20];
        char surname[20];
        int weight;
} osoba;

2]

Code:

typedef struct {
        char name[20];
        char surname[20];
        int weight;
} Person;

Nadeklarujeme:

Code:

Person * osoba;

Naalokujeme paměť (je to podobné jako operátor new - jak to známe u vytvoření instance):

Code:

osoba = (Person*)malloc(sizeof(Person));

Klasicky přiřazujeme:

Code:

osoba.weight = 80;

Pozor na pole, není přiřaditelné, proto se musí použít funkce strcpy k tomuto účelu:

Code:

strcpy(osoba.name, "Karel");

Pokud je vyžadováno pole, naalokujeme paměť podobným způsobem (ta dvojka je tam důležitá protože nám říká, že jsme vytvořili pole pro dvě struktury):

Code:

osoba2 = (Person*)malloc(2 * sizeof(struct Person*));

Klasicky přiřazujeme:

Code:

osoba2[0].weight = 50;
strcpy(osoba2[0].name, "Bětka");
osoba2[1].weight = 59;
strcpy(osoba2[1].name, "Libuše");

Nejsem si u všeho úplně jist. Určitě budu rád, pokud někdo něco k tomuto doplní.


Srdcem trochu-programátor, duší rádoby-matematik a povoláním analytik-vývojář.

Offline

 

#3 14. 12. 2011 21:38 — Editoval milwoukee (14. 12. 2011 21:45)

milwoukee
Příspěvky: 158
Reputace:   
 

Re: Dynamicka alokace Struct

↑ RePRO: Dakujem takze tie polia netreba osobitne alokovat? ak nechcem char meno[20] ale char * meno;

Offline

 

#4 15. 12. 2011 01:04 — Editoval RePRO (15. 12. 2011 01:04)

RePRO
Místo: Jihlava
Příspěvky: 363
Škola: AI VŠPJ (09-12, Bc.)
Pozice: programátor
Reputace:   11 
Web
 

Re: Dynamicka alokace Struct

Zdravím,
pokud máme ve struktuře char * name, tak to musíme samozřejmě alokovat.

V našem případě to bude:

Code:

person osoba3;
osoba3.name = (char*)malloc(20);

Srdcem trochu-programátor, duší rádoby-matematik a povoláním analytik-vývojář.

Offline

 

Zápatí

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson