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
Odpovedá na DarkCoder
Patrik Pastor:29.8.2019 20:32

to nechpu, XOR ma operator znaceny '^'? A proc by xorovani promennych bylo menne efektivni jako incializace pomocne promenne? (jak tvrdis, ze by byla prinejmensim stejne rychla). Jedna se tedy o efektivitu s pohledu mista v pameti nebo efektivitu vypocetnich instrukci? (pamet vs procesor)

 
Odpovedať
29.8.2019 20:32
Avatar
DarkCoder
Člen
Avatar
Odpovedá na Patrik Pastor
DarkCoder:29.8.2019 21:01

Ano, jedná se o bitový operátor XOR (nonekvivalence) a ten má skutečně označení '^'. Operátor XOR nastavuje bit na 1, když jsou oba bity navzájem různé. Je třeba rozlišovat bitové operátory od logických. Jedná se o efektivitu z hlediska počtu výpočetních instrukcí při zachování stejné velikosti potřebné paměti.

Odpovedať
29.8.2019 21:01
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Odpovedá na DarkCoder
Patrik Pastor:29.8.2019 22:07

no ale stale nechapu proc by xorovani melo byt vypocetne slozitejsi. Chapu ze to je operace navic, ale prece to je skoro nic pro dnesni procesory

 
Odpovedať
29.8.2019 22:07
Avatar
DarkCoder
Člen
Avatar
Odpovedá na Patrik Pastor
DarkCoder:29.8.2019 22:35

Je to z několika důvodů: Za použití pomocné proměnné dochází k přímému kopírování, kdežto u použití XOR dochází navíc k porovnávání jednotlivých bitů. Dále u procesorů řady x86 jak i Intelu tak i u AMD dochází při pohybu mezi registry k nulové odezvě (eliminace MOV). A nakonec XOR algoritmus je závislý na výsledku předchozí operace. Moderní CPU se snaží provádět instrukce paralelně prostřednictvím tzv. instrukčních rour. A jelikož výměna obsahu proměnných za použití XOR je závislá na předchozím subvýsledku, nelze použít výhod paralelismu. To způsobuje, že výměna obsahu proměnných za použití XOR bude pomalejší nežli za použití pomocné proměnné.

Odpovedať
+1
29.8.2019 22:35
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Odpovedá na DarkCoder
Patrik Pastor:29.8.2019 22:49

predpokladam ze "(eliminace MOV)" - je prikaz pro ulozeni hodnoty na adresu? Nejsem si jisty , ale videl jsem to mam dojem v assembleru. Snad na to tady taky casem budou nejake clanky

 
Odpovedať
29.8.2019 22:49
Avatar
Michal H.
Člen
Avatar
Odpovedá na gusto
Michal H.:23.2.2020 6:06

no nevím jak v c, ale například c ++ nejde uložit adresa do ukazatele takto...

int * p_int;
p_int = 0xC7000000;

tohle udělat nelze. Snažíš se do adresy uložit číslo. Číslo musíš explicitně přetypovat aby se z něj stala vlastně adresa.

p_int = (int *) 0xC7000000;

tak že int* bude asi typ :) A ukazatele patří mezi složené typy. Řekl bych že tady rozdíl mezi c a c++ moc velký nebude.

 
Odpovedať
23.2.2020 6:06
Avatar
krepsy3
Tvůrce
Avatar
krepsy3:10.10.2020 16:36

V článku se píše:

...Proměnná typu pole totiž není nic jiného než ukazatel. To znamená, že nám bez problémů projde následující operace přiřazení:

int pole[10];
int* p_pole = cisla;

To je nějaký divný (ten kód). Zkusil jsem se nad tím zamyslet, a došlo mi - nemá na druhém řádku být 'int* p_pole = pole;'?

Odpovedať
10.10.2020 16:36
Programátor je stroj k převodu kávy na kód.
Avatar
Odpovedá na krepsy3
Patrik Valkovič:10.10.2020 16:43

Ano má, díky za upozornění. Oprava se již schvaluje.

Odpovedať
+1
10.10.2020 16:43
Nikdy neumíme dost na to, abychom se nemohli něco nového naučit.
Avatar
Jozef Vendel
Člen
Avatar
Jozef Vendel:11.1.2021 17:42

Je škoda a sklamanie, že v tomto kurze nie sú praktické cvičenia k jednotlivým lekciám ako to bolo v kurze Základy C.

 
Odpovedať
11.1.2021 17:42
Avatar
DarkCoder
Člen
Avatar
Odpovedá na Jozef Vendel
DarkCoder:11.1.2021 18:33

Pokud Tě zajímají ukazatele a jejich praktické použití, což je alfou a omegou programování v C, pak není nic snazšího, než že napíšeš příspěvek do C sekce s tím, co Tě zajímá.

Odpovedať
11.1.2021 18:33
"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é 10 správy z 58.