Mikuláš je tu! Získaj 90 % extra kreditov ZADARMO s promo kódom CERTIK90 pri nákupe od 1 199 kreditov. Len do nedele 7. 12. 2025! Zisti viac:
NOVINKA: Najžiadanejšie rekvalifikačné kurzy teraz s 50% zľavou + kurz AI ZADARMO. Nečakaj, táto ponuka dlho nevydrží! Zisti viac:

Diskusia – 1. diel - Úvod do ukazovateľov (pointer) v jazyku C

Späť

Upozorňujeme, že diskusie pod našimi online kurzami sú nemoderované a primárne slúžia na získavanie spätnej väzby pre budúce vylepšenie kurzov. Pre študentov našich rekvalifikačných kurzov ponúkame možnosť priameho kontaktu s lektormi a študijným referentom pre osobné konzultácie a podporu v rámci ich štúdia. Toto je exkluzívna služba, ktorá zaisťuje kvalitnú a cielenú pomoc v prípade akýchkoľvek otázok alebo projektov.

Komentáre
Posledné komentáre sú na spodnej časti poslednej stránky.
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í.

Odpovedať
Neaktivní uživatelský účet
Avatar
David Hartinger
Vlastník
Avatar
Odpovedá na Neaktivní uživatel
David Hartinger:3.12.2014 16:55

Díky, opravil jsem :)

Odpovedať
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.

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?

Editované
Avatar
tomisoka
Tvůrce
Avatar
Odpovedá 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.

Editované
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

Avatar
tomisoka
Tvůrce
Avatar
Odpovedá 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?

Avatar
Matej
Člen
Avatar
Odpovedá 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

Avatar
tomisoka
Tvůrce
Avatar
Odpovedá 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.

Editované
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.

Posledné komentáre sú na spodnej časti poslednej stránky.
Robíme čo je v našich silách, aby bola tunajšia diskusia čo najkvalitnejšia. Preto do nej tiež môžu prispievať len registrovaní členovia. Pre zapojenie sa do diskusie sa zaloguj. Ak ešte nemáš účet, zaregistruj sa, je to zadarmo.

Zobrazené 10 správy z 58.