NOVINKA - Online rekvalifikační kurz Python programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
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 6 - Rozdíly mezi textovými a binárními soubory 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
DarkCoder
Člen
Avatar
Odpovídá 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.

Odpovědět
3.9.2019 19:37
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
DarkCoder
Člen
Avatar
Odpovídá 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.

Odpovědět
3.9.2019 21:17
"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ě.

Odpovědět
26.11.2024 8:33
"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 3 zpráv z 33.