Mikuláš je tu! Získaj 90 % extra kreditov ZADARMO s promo kódom CERTIK90 pri nákupe od 1 199 kreditov. Len do nedele 7. 12. 2025! Zisti viac:
NOVINKA: Najžiadanejšie rekvalifikačné kurzy teraz s 50% zľavou + kurz AI ZADARMO. Nečakaj, táto ponuka dlho nevydrží! Zisti viac:

Diskusia – 1. diel - Úvod do ukazovateľov v C ++

Späť

Upozorňujeme, že diskusie pod našimi online kurzami sú nemoderované a primárne slúžia na získavanie spätnej väzby pre budúce vylepšenie kurzov. Pre študentov našich rekvalifikačných kurzov ponúkame možnosť priameho kontaktu s lektormi a študijným referentom pre osobné konzultácie a podporu v rámci ich štúdia. Toto je exkluzívna služba, ktorá zaisťuje kvalitnú a cielenú pomoc v prípade akýchkoľvek otázok alebo projektov.

Komentáre
Posledné komentáre sú na spodnej časti poslednej stránky.
Avatar
Štefan Smrek:9. marca 20:57

V súvislosti s predávaním poľa ako argumentu(para­metru) funkcie, sa chcem opýtať:

Máme nejaké pole čísel v hlavnej funkcii main(), napr:

#include <iostream>

void vynuluj_pole(int cisla[])
{
    cout << sizeof(cisla) << endl;  // tu to dá nesprávny výsledok 8 bajtov,
                                    // prečo ?
    ...
}

int main(void)
{
    int pole[] = {1,2,3,4,5};
    cout << sizeof(pole) << endl;  // tu to dá správnu hodnotu 20 bajtov
    vynuluj_pole(pole);
    return 0;
}

Prečo v hlavnej funkcii main() funkcia sizeof() funguje správne, ale vo volanej funkcii
vynuluj_pole() už nie? Veď v obidvoch prípadoch má ako argument to isté pole.
A názov poľa je vlastne pointer na to pole. Čiže v obidvoch prípadoch má funkcia sizeof()
ako argument pointer na pole cisel. Čo sa zmenilo? Prečo dáva iné výsledky?

Avatar
DarkCoder
Člen
Avatar
Odpovedá na Štefan Smrek
DarkCoder:9. marca 21:30

sizeof není funkce ale operátor preprocesoru.

Ve funkci main() vrátí sizeof(pole) velikost celého pole v bajtech, 5 * 4 bajtů = 20 bajtů.
Ve funkci vynuluju_pole() vrátí velikost ukazatele (obvykle 8 bajtů na 64bit systémech)

Pokud potřebuješ znát velikost pole uvnitř funkce, musíš ji předat jako další parametr.

Odpovedať
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Odpovedá na DarkCoder
Štefan Smrek:9. marca 21:45

Ďakujem za odpoveď a rýchlu reakciu. Tak nejak som tušil, že to tak bude.
I keď stále nechápem, prečo operátor sizeof() vo funkcii vynuluj_pole()
nevie vrátiť veľkosť poľa, ale v hlavnej funkcii main() to vie.

Avatar
DarkCoder
Člen
Avatar
Odpovedá na Štefan Smrek
DarkCoder:9. marca 21:56

Operátor sizeof vrátí velikost pole pouze tedy, když je pole deklarované ve stejném rozsahu, v jakém se používá. Když se pole předává jako argument funkce, stáva se z něho ukazatel a sizeof vrátí velikost tohoto ukazatele, ale ne velikost původního pole.

Odpovedať
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Odpovedá na DarkCoder
Štefan Smrek:9. marca 22:14

Veľmi pekne ďakujem. Takže podmienkou je rovnaký rozsah platnosti.
Hm, to by ma nenapadlo.

Posledné komentáre sú na spodnej časti poslednej stránky.
Robíme čo je v našich silách, aby bola tunajšia diskusia čo najkvalitnejšia. Preto do nej tiež môžu prispievať len registrovaní členovia. Pre zapojenie sa do diskusie sa zaloguj. Ak ešte nemáš účet, zaregistruj sa, je to zadarmo.

Zobrazené 5 správy z 25.