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 – 3. diel - Aritmetika 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
Odpovedá na Jan Michálek
Patrik Valkovič:8.1.2019 15:50

Opravil jsem překlepy, které v článku byly. Poslední ukázku jsem nechal jak je, protože tam je deklarované pole jako data.

Odpovedať
Nikdy neumíme dost na to, abychom se nemohli něco nového naučit.
Avatar
Lukáš Taragel:2.1.2020 11:53

Prosim, pomocí pointeru se snažím naplnit pole hodnotami zvyšující se o +1, ale nedaří se mi to. Tedy chci naplnit pole pomocí pointeru hodnotami 1, 2, 3, ..., 100.

Chápu, že pomocí bloku by se to udělalo např. takhle:

int *pole = new int[100];

for (int i = 0; i < 100; i++)
{
    pole[i] = i + 1;
}

Ale jak to udělat pomocí pointeru? Snažím se o něco podobného a háže mi to chybu:

int *p_pozice;
*p_pozice = 0;

for (p_pozice = pole; p_pozice < pole + 100; p_pozice++)
{
    *p_pozice++;
}
Avatar
Odpovedá na Lukáš Taragel
Patrik Valkovič:2.1.2020 16:25

Ahoj,
problém je, že ukazateli nenastavuješ v cyklu hodnotu. Navíc nastavuješ hodnotu pointeru, který nikam neukazuje (na druhhém řádku). Správně by to bylo takhle.

int* pole = new int[100];
for(int* pointer = pole; pointer < pole + 100; pointer++)
    *pointer = pointer - pole;
Odpovedať
Nikdy neumíme dost na to, abychom se nemohli něco nového naučit.
Avatar
DarkCoder
Člen
Avatar
Odpovedá na Patrik Valkovič
DarkCoder:2.1.2020 17:49

Ještě posun:

*pointer = (pointer - pole) + 1;                // pro 1 až 100
Odpovedať
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Odpovedá na Patrik Valkovič
Lukáš Taragel:3.1.2020 13:53

Ahoj, už chápu, díky moc!

Avatar
dvorkam
Člen
Avatar
dvorkam:31.7.2020 14:53

V tomhle trochu plavu (proto opakuji), ale není namísto makra NULL

int *data = NULL

lepší používat v C++

int *data = nullptr

?

Avatar
DarkCoder
Člen
Avatar
Odpovedá na dvorkam
DarkCoder:1.8.2020 6:37

Ano, v C++ je preferováno používat nullptr před NULL.

Jedním z důvodu je využití u přetěžovaných funkcí.

Podívej na následující definice přetěžované funkce myfunc().

void myfunc(char const *ptr);
void myfunc(int i);

Bude-li funkce volána takto:

myfunc(NULL);

Která funkce bude volána?

Překvapivě bude volána tato přetěžovaná funkce:

void myfunc(int i);

Důvodem je to že v C++ je makro NULL definováno jako:

#define NULL 0

což je celočíselná hodnota. To je důvod, proč je volána přetěžovaná varianta funkce myfunc(int). A to je problém.

Řešením je použití nullptr

Bude-li funkce volána takto:

myfunc(nullptr);

Pak bude volána tato přetěžovaná funkce:

void myfunc(char const *ptr);
Odpovedať
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
dvorkam
Člen
Avatar
Odpovedá na DarkCoder
dvorkam:1.8.2020 7:32

Děkuji za odpověd. To s tim přeťežováním mě ani nenapadlo, velmi zajímavý poznatek. Děkuji.

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é 8 správy z 18.