NOVINKA - Online rekvalifikační kurz Python programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
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í.
Mezi 13:00 až cca 15:00 proběhne odstávka sítě z důvodu aktualizace. Web bude po celou dobu nedostupný.

Diskuze – Lekce 3 - Aritmetika ukazatelů v C++

Zpět

Upozorňujeme, že diskuze pod našimi online kurzy jsou nemoderované a primárně slouží k získávání zpětné vazby pro budoucí vylepšení kurzů. Pro studenty našich rekvalifikačních kurzů nabízíme možnost přímého kontaktu s lektory a studijním referentem pro osobní konzultace a podporu v rámci jejich studia. Toto je exkluzivní služba, která zajišťuje kvalitní a cílenou pomoc v případě jakýchkoli dotazů nebo projektů.

Komentáře
Avatar
Odpovídá 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.

Odpovědět
8.1.2019 15:50
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++;
}
 
Odpovědět
2.1.2020 11:53
Avatar
Odpovídá 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;
Odpovědět
2.1.2020 16:25
Nikdy neumíme dost na to, abychom se nemohli něco nového naučit.
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Patrik Valkovič
DarkCoder:2.1.2020 17:49

Ještě posun:

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

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

 
Odpovědět
3.1.2020 13:53
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

?

 
Odpovědět
31.7.2020 14:53
Avatar
DarkCoder
Člen
Avatar
Odpovídá 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);
Odpovědět
1.8.2020 6:37
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
dvorkam
Člen
Avatar
Odpovídá 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.

 
Odpovědět
1.8.2020 7:32
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 8 zpráv z 18.