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

    Byl vydán Mozilla Firefox 126.0. Přehled novinek v poznámkách k vydání, poznámkách k vydání pro firmy a na stránce věnované vývojářům. Vylepšena byla funkce "Zkopírovat odkaz bez sledovacích prvků". Přidána byla podpora zstd (Zstandard). Řešeny jsou rovněž bezpečnostní chyby. Nový Firefox 126 je již k dispozici také na Flathubu a Snapcraftu.

    Ladislav Hagara | Komentářů: 0
    dnes 15:22 | Nová verze

    Grafana (Wikipedie), tj. open source nástroj pro vizualizaci různých metrik a s ní související dotazování, upozorňování a lepší porozumění, byla vydána ve verzi 11.0. Přehled novinek v aktualizované dokumentaci.

    Ladislav Hagara | Komentářů: 0
    dnes 14:55 | Nová verze

    Byla vydána nová verze 24.0 linuxové distribuce Manjaro (Wikipedie). Její kódové jméno je Wynsdey. Ke stažení je v edicích GNOME, KDE PLASMA a XFCE.

    Ladislav Hagara | Komentářů: 2
    dnes 13:00 | Nová verze

    Byla představena oficiální rozšiřující deska Raspberry Pi M.2 HAT+ pro připojování M.2 periferii jako jsou NVMe disky a AI akcelerátory k Raspberry Pi 5. Cena je 12 dolarů.

    Ladislav Hagara | Komentářů: 1
    dnes 12:44 | Pozvánky

    V Praze o víkendu proběhla bastlířská událost roku - výstava Maker Fair v Praze. I strahovští bastlíři nelenili a bastly ostatních prozkoumali. Přijďte si proto i vy na Virtuální Bastlírnu popovídat, co Vás nejvíce zaujalo a jaké projekty jste si přinesli! Samozřejmě, nejen českou bastlířskou scénou je člověk živ - takže co se stalo ve světě a o čem mohou strahováci něco říct? Smutnou zprávou může být to, že provozovatel Sigfoxu jde do

    … více »
    bkralik | Komentářů: 0
    dnes 12:33 | Humor

    Kam asi vede IllllIllIIl.llIlI.lI? Zkracovač URL llIlI.lI.

    Ladislav Hagara | Komentářů: 1
    včera 22:00 | IT novinky

    Společnost OpenAI představila svůj nejnovější AI model GPT-4o (o jako omni, tj. vše). Nově také "vidí" a "slyší". Videoukázky na 𝕏 nebo YouTube.

    Ladislav Hagara | Komentářů: 0
    včera 15:44 | Zajímavý článek

    Ondřej Filip publikoval reportáž z ceremonie podpisu kořenové zóny DNS. Zhlédnout lze také jeho nedávnou přednášku Jak se podepisuje kořenová zóna Internetu v rámci cyklu Fyzikální čtvrtky FEL ČVUT.

    Ladislav Hagara | Komentářů: 0
    včera 14:22 | IT novinky

    Společnost BenQ uvádí na trh novou řadu monitorů RD určenou pro programátory. První z nich je RD240Q.

    Ladislav Hagara | Komentářů: 19
    včera 13:00 | IT novinky

    Byl aktualizován seznam 500 nejvýkonnějších superpočítačů na světě TOP500. Nejvýkonnějším superpočítačem nadále zůstává Frontier od HPE (Cray) s výkonem 1,206 exaFLOPS. Druhá Aurora má oproti loňsku přibližně dvojnásobný počet jader a dvojnásobný výkon: 1,012 exaFLOPS. Novým počítačem v první desítce je na 6. místě Alps. Novým českým počítačem v TOP500 je na 112. místě C24 ve Škoda Auto v Mladé Boleslavi. Ostravská Karolina, GPU

    … více »
    Ladislav Hagara | Komentářů: 0
    Podle hypotézy Mrtvý Internet mj. tvoří většinu online interakcí boti.
     (72%)
     (6%)
     (11%)
     (11%)
    Celkem 246 hlasů
     Komentářů: 16, poslední dnes 11:05
    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: 72 | 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.