Diskuze: Objasnenie pojmu pointer
V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.


Zobrazeno 9 zpráv z 9.
K personalizaci obsahu a reklam, poskytování funkcí sociálních médií a analýze naší návštěvnosti využíváme soubory cookie. Informace o tom, jak náš web používáte, sdílíme se svými partnery pro sociální média, inzerci a analýzy. Partneři tyto údaje mohou zkombinovat s dalšími informacemi, které jste jim poskytli nebo které získali v důsledku toho, že používáte jejich služby.
Používáme nezbytné cookies pro fungování webu a s tvým souhlasem také analytické a marketingové cookies.
Zajišťují základní funkce, bezpečnost a služby, které sis vyžádal. Nelze je vypnout.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| ITnetwork | ITnetwork | Provoz webu, relace, přihlášení a uložení nastavení cookies. | PHPSESSID, auth_token, sid, itn_consent_impression, __Host-itn_consent | Relace až 1 rok |
| Google Tag Manager | Správa značek a načítání měřicích nástrojů webu. | Žádné | Neukládá se | |
| Google Fonts | Načítání typografie webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google Hosted Libraries | Načítání potřebných knihoven a stylů webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google reCAPTCHA | Ochrana formulářů a webu před zneužitím. | _GRECAPTCHA, rc::a, rc::b, rc::c, rc::f | Relace až 180 dní | |
| YouTube | Přehrávání vloženého video obsahu. | localStorage, IndexedDB; cookies after playback interaction | Relace až trvalé úložiště | |
| Vimeo | Vimeo | Přehrávání vloženého video obsahu. | __cf_bm, _cfuvid, vuid, localStorage, IndexedDB | Relace až 2 roky |
| Facebook Login | Meta | Přihlášení pomocí účtu třetí strany. | Úložiště řízené poskytovatelem | Relace až 1 rok |
| GoPay | GoPay | Zpracování uživatelem vyžádané platby. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
Pomáhají nám porozumět používání webu a zlepšovat ho.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Analytics 4 | Měření návštěvnosti a používání webu. | _ga, _ga_* | Až 2 roky | |
| Microsoft Clarity | Microsoft | Měření návštěvnosti a používání webu. | _clck, _clsk, _cltk | Relace až 1 rok |
Slouží k měření kampaní, personalizaci reklamy a marketingové komunikaci.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Ads | Měření kampaní, reklama a remarketing. | _gcl_au, _gcl_ls | Relace až 90 dní | |
| Meta Pixel | Meta | Měření kampaní, reklama a remarketing. | _fbp, _fbc, localStorage | Až 90 dní |
| Sklik | Seznam.cz | Měření kampaní, reklama a remarketing. | retargeting, sid, szn:* | Relace až trvalé úložiště |
| LinkedIn Insight | Měření kampaní, reklama a remarketing. | bcookie, li_gc, lidc, __cf_bm | Relace až 1 rok | |
| Ecomail | Ecomail.cz | Měření kampaní, reklama a remarketing. | ecmid, Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
| Atribuce kampaní ITnetwork | ITnetwork | Přiřazení návštěvy a objednávky ke kampani. | campaign_clid[*], user_session_context | Až 1 rok |
V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.


int is_param(const char *argv, int (*p_function)())
{
for (int i = 0; argv[i] != '\0'; i++)
{
if (!p_function(argv[i]))
return 0;
}
return 1;
}
Volání pak probíhalo nějak takhle: is_param(argv[1], isalpha) nebo is_param(argv[1], isdigit)
Proč? Jen tak...
Vypadalo to hezky. Vím, že se dá ověřit i jednodušeji, jestli je řetězec
číslo/slovo, ale cílem bylo procvičit si základní věci bez použití
pokročilých funkcí..
Zkráceně - ukazatel na funkci můžeš použít třeba, když máš jeden kód
provádějící jednu věc - třeba průchod polem - a chceš tam používat
více různých funkcí a nechceš psát pro každý případ funkci (při
větším množství už by to bylo značně nepraktické)
3)
protože A[i] je ukazatel na i. prvek pole A.. Proměnná A je ukazatel (na
svůj první prvek) a A[i] rovná se *(A+1)
Takze volanie druhej funkcie vo nejakej funkcii nebude fungovat ? Treba na nu spravit ukazovatel a vtedy mozem v inej funkcii volat funkciu ? To je ten druhy bod. A kto mu tretiemu este sa chcem vratit ze ked je A ukazovatel na svoj prvy prvok tak preco ho potom inicializujem ako int *A; ???? A skusal som naplnat v cykle for sposobom *(A+i)=i; Ale nefungovalo mi to
Nevím, jestli tě správně chápu..
Samozřejmě, že můžeš ve funkci volat jakoukoliv funkci.. ale představ si, že máš nějakou složitou strukturu, kterou procházíš svou funkcí a něco tam děláš.. taková funkce může mýt třeba 100 řádků.
No a ty tam chceš dělat pokaždé něco jiného.. Dejme tomu, že máš dvacet funkcí, která tam chceš za určitých podmínek použít.. Buď to uděláš tak, že pro každou tu možnost napíšeš samostatnou možnost, tj.
for (int i = 0; argv[i] != '\0'; i++)
{
if (!isdigit(argv[i]))
return 0;
}
Pak další funkce:
for (int i = 0; argv[i] != '\0'; i++)
{
if (!moje_fce(argv[i]))
return 0;
}
a tak dál.. všímej, že pokaždé musíš znovu napsat ten cyklus.. pokud by to byla složitější struktura, budeš mít komplikovanější kód.. a obzvlášť, když tam budeš provádět x věcí.. a bude se ti měnit jen ta jedna funkce..
s pomocí ukazatele na fci ti zůstane jedna jediná funkce.. kterou si
vždycky zavoláš a jen jí upřesníš, kterou tu funkci má použít.. 
to *(A+i) vyzkouším.. nerad bych nějak mystifikoval.. 
To *(A+i) funguje.. 
Tu máš ukázku obou přístupů:
int main()
{
int n = 10;
int *A = (int *)malloc(n * sizeof (int));
for(int i = 0; i < n; i++)
{
*(A+i) = i;
}
for (int i = 0; i < n; i++)
printf("%i \n", A[i]);
}
Chybu máš v i <= n... V C začíná pole nulou.. tzn. když budeš mít n = 10, tak poslední prvek je i==9..
ještě k té deklaraci..
int *A; můžeš slovy říct jako: "A je ukazatel na int"
Kdybys tam tu hvězdičku nedal, byl by A normální int..
A je ukazatel protože jsi ho tak
deklaroval. Chtěl jsem tím říct, že každé pole je vlastně ukazatel na
první prvek.. Zároveň ale taky musíš překladači říct, jaký datový
typ.. aby věděl, kolik zabírá bytů v paměti a jak s ním pracovat.. 
takže třeba int pole[10]; je pole deseti intů.. a proměnná pole je
ukazatel na int, která ukazuje na první prvek..
mohl bys udělat třeba toto:
int *ukazatel2;
ukazatel2 = pole + 1;
ukazatel2 ti ukáže na stejný prvek jako pole[1].. 
printf("%i \n", A[i]);
Pozeram na tento vypis a nebude mozne to vypisat takto ?
printf("%i \n", *(A+i)); kde to bude v cykle for tak isto ako ty. Bude to aj
takto fungovat ?
A este k tomu polu tak ja si urobim toto int *A = (int *)malloc(n * sizeof
(int));
kde malloc vracia adresu a ulozim si ju do *A ale tak ked vracia adresu tak mi
to dava ze by tam malo byt A iba nie ? vies mi toto vysvetllit ?
Jo.. jsou to ekvivalentní zápisy 
to *A je tam protože je to deklarace a zároveň přiřazení..
můžeš to taky napsat takhle:
int *A;
A = (int *)malloc(n * sizeof (int));
Najhlavnejší rozdiel v
int A[10];
a
int *A = (int *) malloc(10 * sizeof(int));
je v tom, že prvý spôsob vytvorí pole v zásobníku a druhý v
halde(hromade). Ešte pre doplnenie.
Zásobník sa uvoľňuje sám, pamäť vyčlenená v halde sa musí uvoľniť
príkazom.
Zobrazeno 9 zpráv z 9.