• Kurs C++ - strona główna
  • Kurs C++ - kontakt z autorem
  • Kurs C++ - mapa witryny
  • Kurs C++ - prawa autorskie
  • Kurs C++ - Kanał RSS
Informatyka krok po kroku
Użytkownik niezalogowany

Witaj nieznajomy

Reklamy
Randki

Lekcja 29

Wskaźniki (typ wskaźnikowy) - część trzecia. Operacje na kilku wskaźnikach

utworzono: 2005-04-20 zmodyfikowano: 2005-04-20 Autor: mgr inż. Marcin Nabiałek

Wprowadzenie

Mimo że przedstawiłem Ci już trochę informacji o wskaźnikach, to nadal tak naprawdę nie wiesz o nich zbyt wiele. W tej lekcji postaram Ci się zademonstrować kilka użytecznych zastosowań wskaźników i pokazać, w jaki sposób nie popełniać błędów, które nas mogą drogo kosztować.

Kilka wskaźników - przykład 1

We wszystkich do tej pory przykładach mieliśmy do czynienia tylko z jednym wskaźnikiem. Nawet jeśli w programie pojawiały się dwa wskaźniki, to były one od siebie zupełnie niezależne i tak naprawdę nie miały na siebie żadnego wpływu.

Jako jednak, że wskaźniki dają bardzo duże możliwości, często stosuje się ich co najmniej kilka w jednym programie i dokonuje wielu operacji na kilku wskaźnikach, modyfikując wartości wskaźników lub wartości zmiennych przez wskaźniki pokazywanych.

Przejdźmy od razu do jakiegoś przykładowego programu, a dopiero później zastanowimy się, co się w programie dzieje. Oto program:

#include <iostream>

using namespace std;

int main()
{  
  double liczba=95.21; // zmienna typu double
  double *wskaznik1, *wskaznik2; //wskazniki do typu double
 
  wskaznik1 = &liczba; // ustawiamy wskaznik na zmienna typu double  
 
  cout <<"Wartosc zmiennej liczba wynosi: "<<liczba<<endl;  
  cout <<"Wyluskana wartosc ze wskaznika1 wynosi: "<< *wskaznik1 <<endl;
 
  // wskaznik2 = *wskaznik1; //BLAD!!! (1)
  // *wskaznik2 = wskaznik1; // BLAD!!! (2)
  wskaznik2 = wskaznik1;
  cout <<endl<<"Wartosc zmiennej liczba wynosi: "<<liczba<<endl;  
  cout <<"Wyluskana wartosc ze wskaznika1 wynosi: "<< *wskaznik1 <<endl;      
  cout <<"Wyluskana wartosc ze wskaznika2 wynosi: "<< *wskaznik2 <<endl;      
 
  *wskaznik2 = 5.789;  
  cout <<endl<<"Wartosc zmiennej liczba wynosi: "<<liczba<<endl;  
  cout <<"Wyluskana wartosc ze wskaznika1 wynosi: "<< *wskaznik1 <<endl;      
  cout <<"Wyluskana wartosc ze wskaznika2 wynosi: "<< *wskaznik2 <<endl;
 
  *wskaznik1 = 2.23;
  cout <<endl<<"Wartosc zmiennej liczba wynosi: "<<liczba<<endl;  
  cout <<"Wyluskana wartosc ze wskaznika1 wynosi: "<< *wskaznik1 <<endl;      
  cout <<"Wyluskana wartosc ze wskaznika2 wynosi: "<< *wskaznik2 <<endl;
 
  liczba=-15.88;
  cout <<endl<<"Wartosc zmiennej liczba wynosi: "<<liczba<<endl;  
  cout <<"Wyluskana wartosc ze wskaznika1 wynosi: "<< *wskaznik1 <<endl;      
  cout <<"Wyluskana wartosc ze wskaznika2 wynosi: "<< *wskaznik2 <<endl;    
       
  cout <<endl<<"Nacisnij ENTER aby zakonczyc..."<<endl;
  getchar();  
  return 0;
}
program nr 29.1

W programie mamy do czynienia z jedną zmienną i dwoma wskaźnikami. Najpierw ustawiamy jeden ze wskaźników na zmienną, a potem usiłujemy ustawić drugi wskaźnik na pierwszy wskaźnik. Tu pojawiają się pierwsze problemy, jak coś takiego zrobić.

W linijce opatrzonej komentarzem (1), próbujemy do wartości wskaźnika, czyli adresu (wiesz już przecież, że wskaźniki przechowują adresy), przypisać wartość wyłuskaną z drugiego wskaźnika, czyli zwykłą liczbę, w tym przypadku typu double (nie jest to adres). Oczywiście jest to nieprawidłowe, a już na pewno nie o to nam chodziło. Nie powinniśmy do adresu przypisywać zwykłej wartości liczbowej.

Z kolei w linijce opatrzonej komentarzem (2) próbujemy zrobić coś innego - do wartości wyłuskanej ze wskaźnika (czyli wartości liczbowej), próbujemy przypisać adres drugiego wskaźnika. O to na pewno też nam nie chodziło.

dodajdo

1 | 2 | 3 | 4 | 5 | 6 | 7 | > | |>

Użytkowanie Serwisu oznacza zgodę na wykorzystywanie plików cookie. Szczegółowe informacje