Zarábaj až 6 000 € mesačne! Akreditované rekvalifikačné kurzy od 0 €. Viac informácií.

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
Avatar
Marek Jakoubek:8.10.2022 11:19

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

 
Odpovedať
8.10.2022 11:19
Avatar
Odpovedá 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
 
Odpovedať
13.5.2023 18:18
Avatar
DarkCoder
Člen
Avatar
Odpovedá 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.

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

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

 
Odpovedať
17.7.2023 9:23
Avatar
DarkCoder
Člen
Avatar
Odpovedá 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.

Odpovedať
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
Odpovedá na DarkCoder
Ondřej Šoupal:18.7.2023 8:27

Super, takhle to funguje, díky :)

 
Odpovedať
18.7.2023 8:27
Avatar
DarkCoder
Člen
Avatar
DarkCoder:1.2.2024 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.

Odpovedať
1.2.2024 19:59
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
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é 8 správy z 58.