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 – 6. diel - Rozdiel medzi textovými a binárnymi subor v C - dodatok

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
DarkCoder
Člen
Avatar
Odpovedá na Patrik Pastor
DarkCoder:3.9.2019 19:37

Lze odečítat jeden ukazatel od druhého. Tím se zjistí počet prvků které mezi nimi leží. To má samozřejmě smysl pouze u polí, kde oba tyto ukazatele ukazují na nějaký prvek tohoto pole.

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

Ukazatelová aritmetika se v řetězcích neprojeví, respektive se chová jako ta klasická. To proto, že posun o 1 nebo o N u klasické aritmetiky odpovídá posunu u ukazatelové aritmetiky s datovým typem char. Na tom není vidět ten princip co vlastně ukazatelová aritmetika přináší.

Kromě operátorů & a *, lze na ukazatelové proměnné používat aritmetické operátory: +, ++, - a --. Navíc lze přičítat a odečítat pouze celočíselnou hodnotu.

Ukazatelová aritmetika se od té "normální" liší v tom, že se provádí s ohledem na základní typ ukazatele. Když je ukazatel inkrementován, resp. dekrementován, bude ukazaovat na následující reps. předcházející položku podle základního typu ukazatele.

pi++;

Pokud pi je ukazatel na int a nachází-li se na adrese A, pak po provedení předchozího příkazu bude obsahovat A + sizeof(int). Nikoli A + 1.

pi = pi + N;

Pokud pi je ukazatel na int, pak po provedení příkazu bude nyní pi ukazovat na Nté celé číslo za číslem, na které ukazoval předtím. pi = pi + (N * sizeof(int)). Nikoli pi + N.

Chování s operátory - a -- je obdobné pouze s opačným směrem.

Lze odečítat jeden ukazatel od druhého, tím se zjistí kolik prvků mezi nimi leží.

*pi++ - nejprve inkrementuje ukazatel a poté vezme hodnotu na nové adrese.
(*pi)++ - inkrementace prvku na který ukazatel ukazuje.

Spolu související ukazatele lze porovnávat nebo lze porovnávat ukazatel s nulou, aby se zjistilo, zda jde o nulový ukazatel.

Nejvyšší využití ukazatelové aritmetiky je při práci ukazatelů s poli.

Máme-li pole p pak platí:

p[N] ~ *(p + N)

Ukazatelová aritmetika se provádí s ohledem na základní typ ukazatele proto, aby umožňovala vzájemný vztah mezi a ukazateli. To je to, proč právě vztah mezi ukazateli a poli činí jejích implementaci tak jedinečnou a výkonnou.

Odpovedať
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
DarkCoder
Člen
Avatar
DarkCoder:26.11.2024 8:33

Pokud provádíme otevření souboru uvnitř funkce, je třeba, aby funkce reflektovala úspěšnost této operace. Je to operace, která může selhat a tudíž není vhodné aby funkce měly návratový typ void! Popřípadě by měla nějakým jiným způsobem indikovat selhání operace.

Přetypování na řádku při výpisu časů je trochu divoké.

ve skutečnosti dokážu přepsat tvoji funkci vytvor_txt_subor() tak, že bude stejně rychlá jako funkce, která pracuje s binárním souborem (kromě odlišné velikosti souborů)

Toto je naprostý nesmysl. Zápis čísla do souboru v textové podobě vyžaduje dost operací, které jsou náročné a tudíž zápis čísla v textové podobě do souboru nebude stejně rychlé jako přímý zápis čísla v binární podobě.

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