Geek tričko zdarma Geek tričko zdarma
Tričko zdarma! Stačí před dobitím bodů použít kód TRIKO15. Více informací zde
Avatar
Patrik Pastor:30. srpna 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. srpna 16:00
Avatar
Patrik Valkovič
Šéfredaktor
Avatar
Odpovídá na Patrik Pastor
Patrik Valkovič:30. srpna 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. srpna 16:05
Nahoru Odpovědět 30. srpna 16:04
Nikdy neumíme dost na to, abychom se nemohli něco nového naučit.
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
Odpovídá na Patrik Valkovič
Patrik Pastor:30. srpna 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. srpna 16:11
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Patrik Pastor
DarkCoder:30. srpna 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í
+1 bodů
Řešení problému
Nahoru Odpovědět  +1 30. srpna 17:45
"„Učíš-li se proto, aby sis zapamatoval, zapomeneš. Učíš-li se proto, abys porozuměl, zapamatuješ si."
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.