Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Patrik Pastor:30.8.2019 16:00

Po precteni lekce 3 dynamicke spravy pameti jazyka c, me zarazila jedna vec. Pokud je nejaka struktura vytvorena dynamicky (ukazuje na ni nejaky pointer), pristupuje se k jeji atributum pres sipku.

typedef struct{
char jmeno[20];
...
} uzivatel;

int main (){
uzivatel* u = malloc(sizeof(uzivatel));
strcpy(u->jmeno, "Karel");

Ale kdyz je staticky vytvorene struktura je operator pristupu '.' tecka:

typedef struct{
   char zelenina[10];
   char ovoce[10];
}

int main (void) {
 PLODINA p[20];
strcmp(p[0].zelenina, "rajce")
printf("%s", p[0].zelenina)

PROC to tak je? Kdyz oba atributy jsou pole, takze jsou pointery OBA, v cem se teda lisi ze pouzivaji jineho operator? To ze je jedna staticky a druhe dynamicky alokovane, prece neznamena ze by meli mit rozdilne operatory.

TAKY
u pristupu pres -> je pristoupeno k hodnote nebo adrese promenne? V lekci to bylo pouzito u obou pripadech (v printf jako hodnota, v strcmpy jako pointer ukazujici na adresu), takze to je jako oboji nebo jak?

Diky za odpoved, v lekci toto nebylo uvedeno dostatecne

 
Odpovědět
30.8.2019 16:00
Avatar
Odpovídá na Patrik Pastor
Patrik Valkovič:30.8.2019 16:04

Ahoj,
Operátor -> je dereferencování a přístup v jednom. Takže objekt->neco je to stejné jako (*objekt).neco. Od toho se také odvijí, kdy použít který operátor. Tečka je použita na hodnotu, zatímco šipka na ukazatel.

Editováno 30.8.2019 16:05
Nahoru Odpovědět
30.8.2019 16:04
Nikdy neumíme dost na to, abychom se nemohli něco nového naučit.
Avatar
Odpovídá na Patrik Valkovič
Patrik Pastor:30.8.2019 16:11

tak proc potom u te plodiny, jak mam v prikladu, je kopirovano stringu pres tecku?
strcpy(plodina.zelenina, "rajce")? kdyz je '.' pouzita jako hodnota, ale funkce strcpy prijima jako prvni i druhy argument ukazatele na pole? Coz je opak hodnoty

 
Nahoru Odpovědět
30.8.2019 16:11
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Patrik Pastor
DarkCoder:30.8.2019 17:45

To co je uvnitř struktury jsou prvky struktury. To hlavní je z jakého typu proměnné se k těmto prvkům přistupuje. Pokud se k prvku přistupuje přes strukturovou proměnnou, používá se operátor tečka, pokud přes ukazatelovou proměnnou, používá se operátor šipka.

struct sType {
        int x;
};

int main(void) {
        struct sType s, *ps = &s;

        s.x = 10; // pristup pres strukturovou promennou
        ps->x = 10; // pristup pres ukazatelovou promennou

        return 0;
}
Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
30.8.2019 17:45
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 4 zpráv z 4.