IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
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
Marek Jakoubek:8.10.2022 11:19

Úžasnĕ a velice přehledně sepsáno. Díky moc!

 
Odpovědět
8.10.2022 11:19
Avatar
Odpovídá na Jakub Hrbáček
Štefan Smrek:13.5.2023 18:18

Ahoj, píšem len svoj názor. Ak sa mýlim, prosím znalých, aby ma opravili.

To, čo píšeš, je správne v prípade, že mikroprocesor používa spôsob ukladania
čísel do pamäti, ktorý sa nazýva high_endián. V podstate ide len o to, z ktorej strany
začne ukladať tie štyri bajty, z ktorých sa typ 'int' skladá.

Opakom high_endiánu je low_endián, ktorý by vyzeral takto:

0x23aadc  [0011 1000]
0x23aadd  [0000 0000]
0x23aade  [0000 0000]
0x23aadf  [0000 0000]

Pre lepšie pochopenie uvediem príklad s číslom 1071887692

Adresa          Binárny       Dekadický    Vyhodnotenie        Súčet
v pamäti        zápis         zápis        bajtu               bajtov

0x23aadc     [0100 1100]      76           76 * 1                      76
0x23aadd     [1011 0101]      181          181 * 256                46336
0x23aade     [1110 0011]      227          227 * 65536           14876672
0x23aadf     [0011 1111]      63           63 * 16777216       1056964608
                                                               ----------
                                                               1071887692
 
Odpovědět
13.5.2023 18:18
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Štefan Smrek
DarkCoder:14.5.2023 11:04

O endianitě v článku nebyla řeč, ikdyž vyobrazení uložení dat s ní souvisí. To na co správně Jakub naráží je chybný počet bitů v buňce. Buňka představuje byte a ten he tvořen 8 bity. Už jsem zde někde o tom psal. Dosud to nebylo opraveno.

Odpovědět
14.5.2023 11:04
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
DarkCoder
Člen
Avatar
DarkCoder:14.5.2023 11:29

Článek bohužel obsahuje enormní množství chyb, nepřesných a chybějících informací. Berte proto obsah článku hodně s rezervou!

Odpovědět
14.5.2023 11:29
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Ondřej Šoupal:17.7.2023 9:23

Ahoj,

tento ukázkový kód:

int main(int argc, char** argv) {
    int a, *p_a;
    a = 56;
    p_a = &a; // Uloží do p_a adresu proměnné a
    *p_a = 15; // Uloží hodnotu 15 na adresu v p_a
    printf("Ukazatel p_a má hodnotu %d ukazuje na hodnotu %d", p_a, *p_a);
    return (EXIT_SUCCESS);
}

mi hlásí chybu u řádku printf: Mismatching the argument type "int" and conversion specifier "d".

Výpis do konzole asi nebude úplně dobře, protože mi p_a mi vypisuje záporné číslo -13276. Kde by mohla být chyba?

Děkuji

 
Odpovědět
17.7.2023 9:23
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Ondřej Šoupal
DarkCoder:17.7.2023 14:33

Kód je téměř v pořádku, chyba je ve specifikaci formátu. Druhý argument funkce printf() je ukazatel, pro který použijeme %p nikoli %d.

printf("%p %d\n", p_a, *p_a);

Jinak formulace uvnitř printf() je nepřesná.

Hodnotou ukazatele je adresa objektu, tedy ukazuje na objekt jehož hodnota je XY.

Odpovědět
17.7.2023 14:33
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Odpovídá na DarkCoder
Ondřej Šoupal:18.7.2023 8:27

Super, takhle to funguje, díky :)

 
Odpovědět
18.7.2023 8:27
Avatar
DarkCoder
Člen
Avatar
DarkCoder:1. února 19:59

Proč v odstavci Předávání pole není varianta:

typ* nazev_promenne

Od první lekce nesmyslně používáte funkci main() s double pointerem a pak ani neuvedete jednodušší variantu.

Odpovědět
1. února 19:59
"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 8 zpráv z 58.