abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    dnes 04:44 | Nová verze

    Byl vydán LineageOS 23.2 (Mastodon). LineageOS (Wikipedie) je svobodný operační systém pro chytré telefony, tablety a set-top boxy založený na Androidu. Jedná se o nástupce CyanogenModu.

    Ladislav Hagara | Komentářů: 0
    dnes 03:44 | IT novinky

    Od března budou mít uživatelé Discordu bez ověření věku pouze minimální práva vhodná pro teenagery.

    Ladislav Hagara | Komentářů: 1
    včera 23:43 | IT novinky

    Evropská komise (EK) předběžně shledala čínskou sociální síť pro sdílení krátkých videí TikTok návykovým designem v rozporu s unijním nařízením o digitálních službách (DSA). Komise, která je exekutivním orgánem Evropské unie a má rozsáhlé pravomoci, o tom informovala v tiskovém sdělení. TikTok v reakci uvedl, že EK o platformě vykreslila podle něj zcela nepravdivý obraz, a proto se bude bránit.… více »

    Ladislav Hagara | Komentářů: 5
    včera 18:33 | Nová verze

    Offpunk byl vydán ve verzi 3.0. Jedná se o webový prohlížeč běžící v terminálu a podporující také protokoly Gemini, Gopher a RSS. Přibyl nástroj xkcdpunk pro zobrazení XKCD v terminálu.

    Ladislav Hagara | Komentářů: 0
    včera 18:22 | Zajímavý projekt

    Promethee je projekt, který implementuje UEFI (Unified Extensible Firmware Interface) bindingy pro JavaScript. Z bootovacího média načítá a spouští soubor 'script.js', který může používat UEFI služby. Cílem je vytvořit zavaděč, který lze přizpůsobit pomocí HTML/CSS/JS. Repozitář se zdrojovými kódy je na Codebergu.

    NUKE GAZA! 🎆 | Komentářů: 0
    včera 12:44 | Bezpečnostní upozornění

    Zpráva Justičního výboru Sněmovny reprezentantů upozorňuje na cenzurní kampaň Evropské komise, mířenou proti svobodě projevu na sociálních sítích. V dokumentu se uvádí, že se Evropská komise během posledních šesti let účastnila více než 100 uzavřených jednání, během nichž po platformách požadovala úpravy pravidel moderování obsahu, přičemž toto úsilí Komise zahrnovalo i cenzuru politických názorů a pravdivých informací. Výbor zdůrazňuje, že tento přístup Bruselu ohrožuje ústavou zaručená práva Američanů na svobodu projevu.

    NUKE GAZA! 🎆 | Komentářů: 11
    včera 04:33 | Nová verze

    Linus Torvalds vydal jádro Linux 6.19. Podrobný výčet změn je ke zhlédnutí na stránce Kernel Newbies, stručné výběry v LWN (část první, druhá).

    |🇵🇸 | Komentářů: 0
    8.2. 03:33 | IT novinky

    Do prodeje jde tichá bezdrátová herní myš Logitech PRO X2 SUPERSTRIKE s analogovými spínači s haptickou odezvou (HITS, Haptic Inductive Trigger System). Cena je 4 459 Kč.

    Ladislav Hagara | Komentářů: 8
    7.2. 21:00 | Zajímavý projekt

    Microsoft na GitHubu zveřejnil zdrojový kód projektu LiteBox, jedná se o 'knihovní operační systém' (library OS) zaměřený na bezpečnost, využívající systémovou architekturu LVBS k ochraně jádra před útoky z uživatelského prostoru. LiteBox je napsán v Rustu a uvolněný pod licencí MIT. Projekt je teprve v rané fázi vývoje.

    NUKE GAZA! 🎆 | Komentářů: 3
    7.2. 16:11 | Zajímavý software

    BreezyBox je open-source shell a virtuální terminál pro populární jednočip ESP32. Nabízí základní unixové příkazy, sledování aktuálního pracovního adresáře (CWD), jednoduchý instalátor a spouštěč aplikací v podobě ELF binárních souborů, zabudovaný HTTP server nebo třeba ovládání WiFi - ukázka použití coby 'malého osobního počítače'. Ačkoliv je BreezyBox inspirovaný BusyBoxem, oproti němu má tento projekt několik externích závislostí, zejména na ESP-IDF SDK. BreezyBox je dostupný pod licencí MIT.

    NUKE GAZA! 🎆 | Komentářů: 0
    Které desktopové prostředí na Linuxu používáte?
     (19%)
     (6%)
     (0%)
     (10%)
     (26%)
     (3%)
     (5%)
     (2%)
     (12%)
     (28%)
    Celkem 820 hlasů
     Komentářů: 25, poslední 3.2. 19:50
    Rozcestník
    Štítky: není přiřazen žádný štítek


    Vložit další komentář
    Luboš Doležel (Doli) avatar 10.11.2010 12:23 Luboš Doležel (Doli) | skóre: 98 | blog: Doliho blog | Kladensko
    Rozbalit Rozbalit vše Re: Ukazatele jako parametry funkcí v jazyce C
    char** je ukazatel na char*, takže pokud chcete z char** dostat char, musíte dělat * dvakrát. Ale smyslem char** je změnit někde adresu ukazatele. Typicky jde tedy o výstupní argument, který tam třeba zapíše nově vytvořený buffer.
    10.11.2010 12:33 Begleiter | skóre: 47 | blog: muj_blog | Doma
    Rozbalit Rozbalit vše Re: Ukazatele jako parametry funkcí v jazyce C
    smyslem char** je změnit někde adresu ukazatele

    Pokud chceme, aby se změna obsahu ukzatele (tedy kam ukazuje) projevila i vně funkce (tedy jakoby se předávalo odkazem), tak pracujeme s "**ret" (v hlavičce funkce). Díky!

    Josef Kufner avatar 10.11.2010 22:55 Josef Kufner | skóre: 70
    Rozbalit Rozbalit vše Re: Ukazatele jako parametry funkcí v jazyce C
    A nebo se předává do funkce pole řetězců.
    Hello world ! Segmentation fault (core dumped)
    Luboš Doležel (Doli) avatar 10.11.2010 23:41 Luboš Doležel (Doli) | skóre: 98 | blog: Doliho blog | Kladensko
    Rozbalit Rozbalit vše Re: Ukazatele jako parametry funkcí v jazyce C
    Jo, typická ukázka: funkce main :-)
    10.11.2010 12:45 qiRzT | skóre: 14 | blog: U_Marvina
    Rozbalit Rozbalit vše Re: Ukazatele jako parametry funkcí v jazyce C
    Zamysli se nad tím, co do té druhé funkce předáváš - nějakou adresu v paměti. Co je na té adrese? Zase nějaká adresa a na téhle adrese je nějaký char.
    typ     char **     char *     char
    adresa: 2008        2004       2000
    data:   2004    ->  2000    ->  'A'
    
    Rozdíl mezi těma funkcema ve volání může být třeba takový:
    char c = 'A';
    char * cp = &c; /*cp == 2000*/
    char ** cpp  = &cp; /* cpp == 2004*/
    
    /*volani se stejnym vysledkem*/
    funkce1(&c);
    funkce1(cp);
    
    /*volani se stejnym vysledkem*/
    funkce2(&cp);
    funkce2(cpp);
    
    
    pokud navíc:
    int funkce2(char **ret)
    {
     return funkce1(*ret);
    }
    
    
    Tak se to všechno bude chovat stejně.
    Důležité je vědět jak problém vyřešit, zbytek zvládne i cvičená opice...
    10.11.2010 14:25 Roger
    Rozbalit Rozbalit vše Re: Ukazatele jako parametry funkcí v jazyce C
    char c = 'A';
    char * cp = &c; /*cp == 2000*/
    
    Ty Cckove komentare tomu zrovna nepomahaji :)
    10.11.2010 15:45 qiRzT | skóre: 14 | blog: U_Marvina
    Rozbalit Rozbalit vše Re: Ukazatele jako parametry funkcí v jazyce C
    Hmm, měl jsem tam dát apoň mezery. Takle s C++ komentáři to snad je jasné:
    char c = 'A';
    char * cp = &c;        // cp  == 2000
    char ** cpp  = &cp;    // cpp == 2004
    
    Důležité je vědět jak problém vyřešit, zbytek zvládne i cvičená opice...
    10.11.2010 16:14 Begleiter | skóre: 47 | blog: muj_blog | Doma
    Rozbalit Rozbalit vše Re: Ukazatele jako parametry funkcí v jazyce C

    Děkuju moc. Už to chápu.

    10.11.2010 12:48 ____ | skóre: 15 | blog: _
    Rozbalit Rozbalit vše Re: Ukazatele jako parametry funkcí v jazyce C

    Nějak nechápu, co na tom chceš ještě vysvětlit. Připadá mi, že v tom hledáš nějakou magii, která v tom není.

    První funkce přebírá ukazatel na znak, druhá funkce přebírá ukazatel na ukazatel na znak. Možná ti pomůže vysvětlení na anglické Wikipedii. A nebo si to zkus načrtnout na papír.

    Ukazatele se dají obecně indexovat jako pole (dokonce i do mínusu), takže *ret ve funkci1 je skutečně to samé jako ret[0] v téže funkci (jak se tu řešilo nedávno, ret[0] a 0[ret], je defakto *((ret) + (0)), což je zas ekvivalentní k *ret). Rozdíl mezi ukazatelem a polem se ukáže v momentě, kdy se pokusíš zjistit jejich velikost.

    A teď jsem tě možná pomátl dočista. :)

    10.11.2010 16:15 Begleiter | skóre: 47 | blog: muj_blog | Doma
    Rozbalit Rozbalit vše Re: Ukazatele jako parametry funkcí v jazyce C

    Díky!

    10.11.2010 13:50 CET
    Rozbalit Rozbalit vše Re: Ukazatele jako parametry funkcí v jazyce C
    Ano, jazyk C je zrovna jazyk na rozmezi mezi assemblerem/strojakem a vyssim jazykem bez ukazatelu (resp. nahrazenych jinymi konstrukcemi).

    Pokud bys nekdy delal v assembleru, tak bys zjistil, ze je uplne jedno, kolik to ma v C hvezdicek, ale ze je dulezite, jak to interpretujes.

    Prakticky jsou ty hvezdicky jakesi kontroly, co ta promenna obsahuje, takze pokud to blbe pouzijes, tak te bude treba kompiler u prace s char **a varovat, ze s obsahem ukazatele (coz je zase ukazatel) chces pracovat jako s char. Ale fakticky ti to dovoli, stejne jako v assembleru muzes obsah pameti bud vypsat jako znak, nebo to vzit jako adresu a cist neco z te adresy.

    Ve vyssich jazycich pak uz te nezajima, ze "a" ve string a; je vlastne taky ukazatel na znaky (ala char *a), ale pracujes s tim, jakoby sama promenna "a" byla ten string.

    Cili funkce1 bere ukazatel na pole charu, cili na adresu, od ktere zacinaji chary.

    char *a je tedy
    a[1000] -> 'A','B','C','D'...'\0'
    
    Druha funkce2 bere ukazatel na ukazatele na chary, cili od adresy ret mas seznam cisel, ktere udavaji adresy, kde zacinaji jednotlive chary.

    Tady je ale char **a

    a[3000] -> 1000,1200,1400,1600
    1000 -> 'a','a','a','a',...'\0'
    1200 -> 'e','e','e','e',...'\0'
    1400 -> 'c','c','c','c',...'\0'
    
    nebo se pletu?
    10.11.2010 16:18 Begleiter | skóre: 47 | blog: muj_blog | Doma
    Rozbalit Rozbalit vše Re: Ukazatele jako parametry funkcí v jazyce C

    Super! Moc děkuju.

    10.11.2010 15:17 deda.jabko | skóre: 23 | blog: blog co se jmenuje "každý den jinak" | za new york city dvakrát doleva a pak už se doptáte
    Rozbalit Rozbalit vše Re: Ukazatele jako parametry funkcí v jazyce C
    int funkce1(char *ret)
    {
      /* Můžu si tedy dovolit toto: */
      *ret = 'A';
    }
    ne tak uplne. treba volani funkce1("Foobar"); ti neprojde, protoze retezec je s nejvetsi pravdepodobnosti v casti pameti, ktera se neda menit.

    Asi před rokem se dostali hackeři na servry Debianu a ukradli jim zdrojové kódy.
    10.11.2010 15:24 kralyk z abclinuxu | skóre: 29 | blog:
    Rozbalit Rozbalit vše Re: Ukazatele jako parametry funkcí v jazyce C
    Tam vypíše warning, protože "Foobar" je, afaik, const char*.
    Nicméně přeloži to a pak vzniká rizoto SIGSEGV.
    rADOn avatar 10.11.2010 17:00 rADOn | skóre: 44 | blog: bloK | Praha
    Rozbalit Rozbalit vše Re: Ukazatele jako parametry funkcí v jazyce C
    C prekladac to dovoli, protoze se nemeni ukazatel ale pamet na kterou ukazuje. C++ to nedovoli.
    "2^24 comments ought to be enough for anyone" -- CmdrTaco
    10.11.2010 17:27 kralyk z abclinuxu | skóre: 29 | blog:
    Rozbalit Rozbalit vše Re: Ukazatele jako parametry funkcí v jazyce C
    Mně to přeložil i g++... ale nevim...
    pavlix avatar 11.11.2010 03:56 pavlix | skóre: 54 | blog: pavlix
    Rozbalit Rozbalit vše Re: Ukazatele jako parametry funkcí v jazyce C
    C prekladac to dovoli, protoze se nemeni ukazatel ale pamet na kterou ukazuje. C++ to nedovoli.
    Takhle použitý const právě naopak znamená, že se *nesmí měnit obsah té paměti.

    * Mnohé překladače pouze varují.
    Já už tu vlastně ani nejsem. Abclinuxu umřelo.
    10.11.2010 16:43 Radek Hladik | skóre: 20
    Rozbalit Rozbalit vše Re: Ukazatele jako parametry funkcí v jazyce C
    Upřímně řečeno, tohle je v C jeden z nejdůležitějších momentů (a pro mně i jeden z největších důvodů, proč C nesnáším). Při programování v C se budete velmi často setkávat s konstrukcemi typu adresa pointeru na pointer a pod. A především i s přetypováváním pointerů, tedy funknce může dostat pointer buď na char nebo int (dejme tomu). Pak má jako parametr pointer na void (netypový pointer) a podle potřeby si pointer přetypuje. A pro jistotu se předává ne pointer na void, ale pointer na pointer na void, aby to šlo změnit.

    Ještě lepší je, když se posílá pointer na pointer na void, ten se přetypuje na nějakou uživatelskou struct, tam se očekává polovina věcí už vyplněná, zbytek se nějak v rámcí funkce dopočítá a vše se vrátí jako nový pointer :-) A přidáme si do toho makra, která sice mohou být úžasná, ale zároveň i megaultrahumusná a vznikne dobrý chaos... Například práce s ASN.1 v OpenSSL je naprosto "úžasná". Zavoláte jedno makro (od kterého není pořádný popis v dokumentaci) a ono to udělá asi milión volání funkcí, přetypovávání a já nevím čeho všeho. Definice makra není pořádně k dispozici, protože je nějaká hromadná, či jak se to jmenuje atd...

    Nu, to jsem se ale nechal trochu unést, v principu jsem chtěl říct jen to, že tahle práce s pointery je v C alfou a omegou všeho a je potřeba jí perfektně ovládát... Až pak budete luštit/tvořit konstrukce typu (sc_path_t *) &(env->file_ref), budete to sakra potřebovat...
    10.11.2010 16:50 kralyk z abclinuxu | skóre: 29 | blog:
    Rozbalit Rozbalit vše Re: Ukazatele jako parametry funkcí v jazyce C
    Ne všichni píší pod gtk :-D
    (a freetype2 a libavcodec a ... a ... :-()
    Grunt avatar 10.11.2010 17:36 Grunt | skóre: 23 | blog: Expresivní zabručení | Lanžhot
    Rozbalit Rozbalit vše Re: Ukazatele jako parametry funkcí v jazyce C
    No jo, ale vem si, že i přes to, že mplayer polovinu času nedělá nic jiného než že někde přesouvá pointery z libav*, ffmpegu, a jiných obalovacích vrstev jak je rychlý. Dovedeš si představit ho napsaný v něčem jiném? (krom komplet Assembleru…i tak ho tam už není málo). Např. stack některých C++ aplikací, to je fakt dílo. Proti nim je i debugovaní kernelu slabé máslo.
    Na co 64-bitů když to jde i s jedním? | 80.78.148.5 | Hack (for) free or Die Hard!
    10.11.2010 18:18 kralyk z abclinuxu | skóre: 29 | blog:
    Rozbalit Rozbalit vše Re: Ukazatele jako parametry funkcí v jazyce C
    Jo, to je pravda, mplayer je hodně rychlý.
    Ale třeba takové VLC je taky (z většiny) v C a přitom je děsně pomalý...
    Grunt avatar 10.11.2010 18:27 Grunt | skóre: 23 | blog: Expresivní zabručení | Lanžhot
    Rozbalit Rozbalit vše Re: Ukazatele jako parametry funkcí v jazyce C
    Tam je totiž těch obalových vrstev ještě jednou tolik.
    Na co 64-bitů když to jde i s jedním? | 80.78.148.5 | Hack (for) free or Die Hard!
    Luboš Doležel (Doli) avatar 10.11.2010 22:04 Luboš Doležel (Doli) | skóre: 98 | blog: Doliho blog | Kladensko
    Rozbalit Rozbalit vše Re: Ukazatele jako parametry funkcí v jazyce C
    Pomalý v čem? :-)
    11.11.2010 01:14 kralyk z abclinuxu | skóre: 29 | blog:
    Rozbalit Rozbalit vše Re: Ukazatele jako parametry funkcí v jazyce C
    V přehrávání.
    Na notebooku s omezeným výpočetním výkonem se to pozná; VLC má o dost níž strop HD videí, které je schopno plynule přehrát...
    David Watzke avatar 11.11.2010 16:18 David Watzke | skóre: 74 | blog: Blog... | Praha
    Rozbalit Rozbalit vše Re: Ukazatele jako parametry funkcí v jazyce C
    To není pravda obecně, třeba na Intelu když používám VA API, tak mi VLC přijde lepší. Problém MPlayeru je hlavně postupný (mírný) rozjíždění A/V.
    “Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
    11.11.2010 20:51 kralyk z abclinuxu | skóre: 29 | blog:
    Rozbalit Rozbalit vše Re: Ukazatele jako parametry funkcí v jazyce C
    Tím Intelem myslíš grafárnu? Tam už funguje aj h264 Vím že dřív šlo jen mpeg2...
    mirec avatar 11.11.2010 09:30 mirec | skóre: 32 | blog: mirecove_dristy | Poprad
    Rozbalit Rozbalit vše Re: Ukazatele jako parametry funkcí v jazyce C
    Taký ffmpeg je tiež v C a patrí medzi pomerne pomalé dekódery. MPEG4 AVC prehráva o dosť pomalšie než CoreAVC.
    LinuxOS.sk | USE="-fotak -zbytocnosti -farebne_lcd +vydrz +odolnost +java" emerge telefon
    10.11.2010 16:56 Begleiter | skóre: 47 | blog: muj_blog | Doma
    Rozbalit Rozbalit vše Re: Ukazatele jako parametry funkcí v jazyce C

    Děkuju za názor.

    10.11.2010 16:59 qiRzT | skóre: 14 | blog: U_Marvina
    Rozbalit Rozbalit vše Re: Ukazatele jako parametry funkcí v jazyce C
    A tos ještě zapoměl na pointery na funkce. S těma makrama jsi mi připoměl moje první setkání s tím, jak jsou v Linuxu (tedy kernelu) řešeny objekty, polymorfismus apod. V tom se vyznat, je taky (aspoň zpočátku) pěkná fuška :-)
    Důležité je vědět jak problém vyřešit, zbytek zvládne i cvičená opice...
    Rezza avatar 10.11.2010 19:03 Rezza | skóre: 25 | blog: rezza | Brno
    Rozbalit Rozbalit vše Re: Ukazatele jako parametry funkcí v jazyce C
    A GLib!
    Grunt avatar 10.11.2010 17:32 Grunt | skóre: 23 | blog: Expresivní zabručení | Lanžhot
    Rozbalit Rozbalit vše Re: Ukazatele jako parametry funkcí v jazyce C
    Na to mám jednoduchý trik. Zapnu GDB a mlátím do TABu (umí to něco jako BASH completion) tak dlouho dokuď se tečkama přes struktury a pointery neprobiju až na požadovanou proměnnou. A jako bonus to zahlásí, když je některá proměnná typu void a nejde dereferencovat. Stallman budiž blahořečen.
    Na co 64-bitů když to jde i s jedním? | 80.78.148.5 | Hack (for) free or Die Hard!
    11.11.2010 22:51 tom
    Rozbalit Rozbalit vše Re: Ukazatele jako parametry funkcí v jazyce C
    Krome *(ret + 1) = 'A' a ret[1] = 'A' muzete psat i 1[ret] = 'A' ;) scitani je totiz komutativni
    11.11.2010 23:34 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše Re: Ukazatele jako parametry funkcí v jazyce C
    To je sice hezké, ale je to - kromě znepřehlednění programu - k něčemu dobré?
    Gilhad avatar 12.11.2010 01:33 Gilhad | skóre: 20 | blog: gilhadoviny
    Rozbalit Rozbalit vše Re: Ukazatele jako parametry funkcí v jazyce C
    Připravuje nás to psychicky na použití Perlu :)

    (A možná se jednou za čas někde vyskytne nějaká složitější konstrukce, která se tak dá zapsat lépe. A taky má určitý půvab "úplnost" - nevylučovat předem věci, které jsou zdarma, jen pro ně nemám použití zrovna tady a teď, zvláště pokud by to vyloučení něco stálo.)

    Založit nové vláknoNahoru

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.