Programowanie: Różnice pomiędzy wersjami

Usunięta treść Dodana treść
Mku84 (dyskusja | edycje)
Mku84 (dyskusja | edycje)
Linia 32:
# [[Programowanie/Procedury i funkcje/Zadania|Zadania]]
== Wskaźniki ==
 
=== Idea wskaźnika ===
 
=== Deklarowanie wskaźników ===
 
=== Wykorzystanie wskaźników ===
 
==== Efekty uboczne wywołania funkcji ====
 
==== Wskaźnikowe struktury danych ====
 
 
==== Podmiana wartości stałej ====
 
Wcześniej napisano, że stała ma wartość ustawianą jedynie na początku swojego istnienia.
Kompilator umożliwia jednak sprytną podmianę wartości stałej przy pomocy rzutowania wskaźnika.
Tworzymy wskaźnik do void wskazujący na stałą.
Wskaźnik możemy rzutować na zwykły typ zmiennej (bez modyfikatora const), dzięki czemu kompilator
pomyśli, że ma do czynienia ze zwykłą zmienną.
 
Dzieje się tak, ponieważ stała jest traktowana jako specyficzny typ. Typy mają swoje ograniczenia,
ale język C pozwala na zmianę typów poprzez rzutowanie. A to umożliwia omijanie ograniczeń typów const.
 
Przykład:
 
<source lang="c">
 
// deklarujemy stałą całkowitoliczbową ...
const int mojaStalaZmienna = 13;
 
//...oraz wskaźnik wskazujący na chroniony obszar pamięci
void* ptrMojaStalaZmienna;// wskaźnik może wskazywać na dowolny typ zmiennej
ptrMojaStalaZmienna = & mojaStalaZmienna;// teraz wskażnik wskazuje na zmienną stałą
 
// spróbujemy nadpisać wartość stałej
 
// to nie przejdzie, bo wskaźnik wskazuje na wartość stałą...
*ptrMojaStalaZmienna = 44;
 
// ...ale po rzutowaniu typu wskaźnika na (int*) kompilator pomyśli, że wskaźnik wskazuje na zwykłą zmienną całkowitą
*(int*)ptrMojaStalaZmienna = 44;
 
// i tym sposobem stała może zostać umiejętnie zmodyfikowana
</source>
 
== Struktury danych ==
# [[Programowanie/Struktury danych/Tablice|Tablice]]