IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
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í.
Avatar
Patrik Pastor:3.9.2019 19:27
int main (void) {

   int(*ukazatel)(void);
   ukazatel = main;
   int i = ukazatel();
   printf("%i\n",i);

   return 0;
}
 
Odpovědět
3.9.2019 19:27
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Patrik Pastor
DarkCoder:3.9.2019 20:44

Půjdu rovnou k věci. Proč se snažíš skákat z jednoho do druhého? Snažíš se tu pracovat s ukazateli na funkce, ale chybí to základní. Takto se neposuneš. Již jsem psal jednou, nemůžeš začít nejvyšší komnatou, musíš postupovat od té nejnižší. Jen tak pochopíš souvislosti potřebné pro další kapitolu. Přeskočením pokročilé techniky nepochopíš.

Podívej třeba na chyby co tam máš:

  • chybí hlavičkový soubor stdio.h jelikož používáš printf()
  • deklaruješ proměnnou i na nesprávném místě (za ostrým příkazem).
  • ukazatel ukazuje na main(), vrácená hodnota je získána při ukončení funkce, to se ale nemůže stát když ji znovu voláš. program se zacyklí a nakonec zhavaruje. Příkaz volání funkce printf() se už nikdy neprovede.

Ale abych Ti dodal něco pozitivního a konstruktivního, můžeš se podívat na následující příklad, jak pracovat s ukazateli na funkce.

#include <stdio.h>

int ret10(void);

int main(void) {
        int(*pf)(void) = NULL;

        pf = ret10;

        //printf("%d", pf());
        printf("%d", (*pf)());

        return 0;
}

int ret10(void) {
        return 10;
}

Program vypíše hodnotu 10 pomocí ukazatele na funkci, která tuto hodnotu vrací. Obě volání funkce printf() vypíší stejný výsledek. Druhá způsob je ale častjší, neboť je z nějk patrné, že se používá ukazatel na funkci a nikoli volání funkce pf(), která není.

Nahoru Odpovědět
3.9.2019 20:44
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Odpovídá na DarkCoder
Patrik Pastor:3.9.2019 20:54

1.) dal jsem jenom cast programu, samozrejme ze mam <stdio.h> includovane
2.) nevim co je "ostry prikaz", ale podobne to meli prve v lekci int vysledek = soucet, kde soucet je funkce, pokud myslis tim ostrym prikazem ze promenna je inicializovana a hned prirazena navratove hodnote funkci, tak - jak rikam, meli to tak v lekci
3.)ukazatel na main, mela byt trosku provokace z moji strany, at to vypada sebe hur, proste to vyzkousim at to spadne nebo ne (proto jsem si i zablokoval pocitac, kdyz sem alokoval pamet v cyklu na xxxx cyklu - to jsme se uz bavili) - takhle se ale se nejrychleji ucim, ze to proste vyzkousim, at to udela, co to udela - ja nemam co ztratit.
4.) jdu postupne - od zakladu pres dynamickou spravu a ted na pokrocile konstrukce,
ale to neznamena ze obcas (pouze obcas) neudalm zacatecnicke chyby, ovsem v tomto pripade tomu tak neni - jak rikam vidis jen cast programu a ja rad experimentuji.

 
Nahoru Odpovědět
3.9.2019 20:54
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Patrik Pastor
DarkCoder:3.9.2019 21:32

Pokud k programu nic nenapíšeš, těžko mohou druzí přesněji reagovat na danou situaci. Nic víc než toto program nevyžadoval, proto jsem reagoval tak jak jsem reagoval. V ostatních programech co jsem viděl tam tuto knihovnu, kde se využívají její funkce vkládáš, tak poté ber tuto část jako bezpředmětnou.

Ostrý příkaz je jakýkoli běžný příkaz. Pokud ovšem již nějaký samostatný příklad zadáš (kromě inicializace), pak už v C nemůžeš deklarovat proměnné. Proměnné můžeš deklarovat mimo vně funkcí jako globální nebo na začátku bloku funkce či bloku příkazů. V C++ již toto omezení neplatí.

Experimentování a provádění úprav programu je v pořádku, to hlavní je pochopit, proč tomu tak je to co program dělá. Přečti si mé moto ve spodní části mých příspěvků, ne nadarmo ho tam mám.

Nahoru Odpovědět
3.9.2019 21:32
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Odpovídá na DarkCoder
Patrik Pastor:3.9.2019 21:42

yes, proto se tak ptam... tak dik za odpovedi. Celkem bych byl stastny kdybys byl neco jako ucitel v realu ale asi bydlis na druhem konci republiky. Tak se ptam aspon tady

 
Nahoru Odpovědět
3.9.2019 21:42
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 5 zpráv z 5.