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 – 4. diel - Makrá v programovacom jazyku 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
DarkCoder
Člen
Avatar
Odpovedá na coells
DarkCoder:14. mája 19:52

Na proměnnou j se nikdy nemusím odkázat a stejně vím, kde je a mám na ni pointer (v tom lepším případě, v tom horším mám pouze pointer).

const int i = 1;
const int j = 2;

int *pj = &i + 1;

Toto není pravda a kód je chybně.

1. Ukazatel mimo platný rozsah

Ukazatelová aritmetika v C se smí používat pouze v rámci jednoho pole (nebo na ukazatel ukazující na jeden prvek za koncem pole, což je výslovně povoleno standardem).

Jelikož i není pole způsobí zápis

int *pj = &i + 1;

nedefinované chování. pj ukazuje na paměť bez záruky, že je platná.

2. Pokus o obcházení const pomocí ukazatele

Proměnné i a j jsou const. Ukazatel pj je však typu int *, ne const int *. To znamená, že se může (ačkoliv by neměl) použít k modifikaci hodnoty na dané adrese. Pokud by pj ukazoval zpět na i, může dojít k narušení const kvalifikátoru. kompilátor hodí varování C4090.

3. Záměna s polem – kód je zavádějící

V jazyce C není zaručeno, že j bude v paměti hned za i. Optimalizátor může proměnné uložit kamkoli, v libovolném pořadí.

4. Nebezpečné čtení nebo zápis z pj

Pokud se později použije *pj (např. printf("%d", *pj);), dojde k přístupu na paměť, která není platná. Může se jednat o jakoukoli hodnotu, může dojít k pádu programu nebo neviditelné logické chybě.

Odpovedať
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
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é 1 správy z 21.