admin
|
|
« : Styczeñ 02, 2013, 12:10:12 » |
|
Wska¼niki * Dotychczas, we wszystkich funkcjach które przedstawia³em, argumenty by³y przekazywanych do funkcji przez warto¶æ. Oznacza to, ¿e wywo³anie funkcji z parametrami, powodowa³o,¿e do funkcji przekazywane by³y by³y kopie warto¶ci zmiennych ale nie orygina³y. Oznacza to, ¿e warto¶æ pocz±tkowa zmiennej przekazanej do funkcji nie by³a modyfikowana przez ta funkcjê.
Wska¼niki s± odpowiednikiem adresu pamiêci w której umieszczono warto¶æ zmiennej. Stanowi± uzupe³nienie klasycznych zmiennych. Wska¼niki deklarowane s± podobnie jak inne zmienne, przed jej u¿yciem. Jedyn± ró¿nic± jest wpisanie gwiazdki przed nazw± zmiennej wska¼nikowej. Istotn± ró¿nica w porównaniu do deklaracji zmiennych jest to,¿e odwo³anie nastêpuje do wskazania adresu (wskazania!!!!).
Przyk³ad 1 -deklaracja zmiennej wska¼nikowej
using namespace std; main() {int *i, *a,b; char *ab_adr; system("pause");}
W programie zadeklarowano zmienne wska¼nikowe: i, a, ab_adr. Bardzo wa¿nym jest umiejêtno¶æ stwierdzenia jaka warto¶æ znajduje pod zmienn± wska¼nikow± (adresem wskazywanym przez wska¼nik). Nale¿y pamiêtaæ,¿e zmienna *a przedstawia warto¶æ która znajduje siê pod adresem a (a- to inna nazwa adresu).
Przyk³ad 2 - odczytywanie warto¶ci ukrytej pod adresem przekazywanym przez wska¼nik.
#include <cstdlib> #include <iostream>
using namespace std;
int main(int argc, char *argv[]) { int *i,*a,b; *i=1000; cout<<" w pamiêci komputera pod adresem: "<<i<<endl; cout<<"znajduje siê warto¶æ: "<<*i<<endl; system("PAUSE"); return EXIT_SUCCESS; }
Program kompiluje poprawnie jednak jego wywo³anie powoduje b³±d (WIN Vista). Dlaczego? Program napisany powy¿ej zapisuje w pamiêci pod przypadkowym adresem warto¶æ 1000. Problem polega na braku ustalonego miejsca w pamiêci w którym ma byæ zapisana liczba 1000. Miejsce to jest przypadkowe, je¿eli trafi na komórkê w którym jest umieszczona np. warto¶æ opisuj±ca rozdzielczo¶æ ekranu to zostanie ona zmieniona na inn±, co spowoduje zak³ócenia w pracy komputera. Na szczê¶cie systemy operacyjne chroni± istotne obszary pamiêci operacyjnej.
|