NOVINKA - Online rekvalifikační kurz Python programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
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í.

Diskuze – Lekce 1 - Úvod do ukazatelů v jazyce C

Zpět

Upozorňujeme, že diskuze pod našimi online kurzy jsou nemoderované a primárně slouží k získávání zpětné vazby pro budoucí vylepšení kurzů. Pro studenty našich rekvalifikačních kurzů nabízíme možnost přímého kontaktu s lektory a studijním referentem pro osobní konzultace a podporu v rámci jejich studia. Toto je exkluzivní služba, která zajišťuje kvalitní a cílenou pomoc v případě jakýchkoli dotazů nebo projektů.

Komentáře
Avatar
Neaktivní uživatel:3.12.2014 16:34

Dobrý den, chtěla bych Vás upozornit na chybu v posledním zdrojovém kódu ve funkci printf() chybí řídící řetězec formátu. Jinak bych Vám chtěla poděkovat za Vaše články, dost mi, jakožto "programátorovi - začátečníkovi", pomáhají.

Odpovědět
3.12.2014 16:34
Neaktivní uživatelský účet
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Neaktivní uživatel
David Hartinger:3.12.2014 16:55

Díky, opravil jsem :)

Odpovědět
3.12.2014 16:55
New kid back on the block with a R.I.P
Avatar
Lukáš Hruda
Tvůrce
Avatar
Lukáš Hruda:3.12.2014 21:02

Možná by bylo dobré uvést něco o endianitě. Třeba v příkladu přiřazení hodnoty 15 na adresu 0x23aadc by na Win 7 bylo pořadí bytů přesně obráceně. Pokud člověk nějakým způsobem pracuje s jednotlivými byty v paměti, je dobré o tom vědět.

 
Odpovědět
3.12.2014 21:02
Avatar
Matej
Člen
Avatar
Matej:11.10.2015 12:26

Ako si Ccko interpretuje argumenty? Resp v kode

void prohod(int *p_a, int *p_b)
{
    int pomocna = *p_a;
    *p_a = *p_b;
    *p_b = pomocna;
}

ked sa dosadi &a ,&b , sa len vymeni pamet premennej (tj pamat a = pamat b tj aj hodnota ) alebo iba hodnota (v pamati , (hodnota pameti a sa nadstavi na b ). Ak je to ten prvy pripad , neni zbytocne davat pointeri ako parametre funkcie?

Editováno 11.10.2015 12:26
 
Odpovědět
11.10.2015 12:26
Avatar
tomisoka
Tvůrce
Avatar
Odpovídá na Matej
tomisoka:11.10.2015 12:58

Vymění se jen hodnota.

Pokud se volá funkce tak argumenty se kterými pracuješ ve funkci jsou jenom kopie. Takže pokud by jsi tu funkci měl napsanou bez těch pointerů, tak by to prohodilo jenom ty kopie (z venku by to vypadalo, jako že ta funkce nic neudělala). Ale protože jako argument máš pointer, tak ten pointer je sice kopie, ale ukazuje na stejnou adresu jako originální pointer.

Editováno 11.10.2015 12:59
 
Odpovědět
11.10.2015 12:58
Avatar
Matej
Člen
Avatar
Matej:11.10.2015 14:42

ak dosadime do funkcie &a a &b

void prohod(int *p_a, int *p_b) // dosadime &a , &b
{
    int pomocna = *p_a; // pomocna je refencia na pamat a (&a)
    *p_a = *p_b; // pamat _a sa nadstavi na pamat _b tj aj na odkazujucu hodnotu
    *p_b = pomocna; // naopak
}

ak sa to bere takto , tnak sa nezmeni iba hodnota ale swapne sa cela pamat aj s hotou nie? podla predchadzajuceho prikladu na pointeri by sa hodota swapla iba ak by dany pointer (teda ak som pochopil spravne pointer v argument liste sa spava ako pointer) musel odkazovat na danu hodnotu tj

*p_a=b

a nie

*p_a=&b //referencia na pamat

V c som novy takze si to asi zle vykladam ale stale mi to nesedi :D

 
Odpovědět
11.10.2015 14:42
Avatar
tomisoka
Tvůrce
Avatar
Odpovídá na Matej
tomisoka:11.10.2015 16:00

Však taky platí:

p_a=&a

a z toho plyne:

*p_a=a

A okomentovaná funkce:

void prohod(int *p_a, int *p_b){ // dosadime &a, &b
  int pomocna = *p_a;//pomocna je přepsána hodnotou na kterou ukazuje pointer p_a(a)
  *p_a = *p_b; // hodnota na kterou ukazuje pointer p_a (a) je přepsána hodnotou na
  //kterou ukazuje pointer p_b (b)
  *p_b = pomocna; // hodnota na kterou ukazuje p_b (b) je přepsána hodnotou pomocna
}

Jinak dál se ve tvém komentáři nějak ztrácím, co znamená:

tnak sa nezmeni iba hodnota ale swapne sa cela pamat aj s hotou nie?

 
Odpovědět
11.10.2015 16:00
Avatar
Matej
Člen
Avatar
Odpovídá na tomisoka
Matej:11.10.2015 16:37

ak som to spravne pochopil tak ak das

*p_a=&a

tak vlastne nastane

p_a=&a;
*p_a= hodnota a

a ked dosadis do pointeru ktory je ako argument adresu k pameti ako parameter, tak sa priradi hodnota k tomu pointeru? :D

 
Odpovědět
11.10.2015 16:37
Avatar
tomisoka
Tvůrce
Avatar
Odpovídá na Matej
tomisoka:11.10.2015 17:03

Ale v tom kódu není nic jako:

*p_a=&a

Ta část v parametru "int *" je datový typ a "p_a" je název proměnné.
Pokud do pointeru "p_a" dosadíš adresu k paměti, tak pak pomocí "*p_a" pracuješ s hodnotou, která se nachází na té dosazené adrese. Samotná hodnota není k ničemu přiřazená, ta se prostě nachází na té adrese.

Editováno 11.10.2015 17:04
 
Odpovědět
11.10.2015 17:03
Avatar
pangas
Člen
Avatar
pangas:10.3.2016 14:10

Zdravím, měl bych malý dotaz. Nějak se mi nedaří inicializovat ukazatel na dvourozměrné pole. Chybové hlášení zní: cannot convert 'char()[26]' to 'char' in initialization.

char abcd[26][26];
char * u = abcd;

Díky za každý tip.

 
Odpovědět
10.3.2016 14:10
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 10 zpráv z 58.