Techniki Programowania wskaźniki 2

Podobne dokumenty
Techniki Programowania wskaźniki

Techniki Programowania przeładowanie funkcji

Programowanie w C++ Wykład 4. Katarzyna Grzelak. 19 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 37

Programowanie w C++ Wykład 5. Katarzyna Grzelak. 16 kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 27

Programowanie w C++ Wykład 5. Katarzyna Grzelak. 26 marca kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 40

Część 4 życie programu

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 6

1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość

1 Wskaźniki. 1.1 Główne zastosowania wskaźników

IMIĘ i NAZWISKO: Pytania i (przykładowe) Odpowiedzi

Wstęp do programowania obiektowego, wykład 7

// Liczy srednie w wierszach i kolumnach tablicy "dwuwymiarowej" // Elementy tablicy są generowane losowo #include <stdio.h> #include <stdlib.

Programowanie 2. Język C++. Wykład 3.

Wskaźniki i dynamiczna alokacja pamięci. Spotkanie 4. Wskaźniki. Dynamiczna alokacja pamięci. Przykłady

Programowanie Procedurale

Podstawy informatyki. Elektrotechnika I rok. Język C++ Operacje na danych - wskaźniki Instrukcja do ćwiczenia

Algorytmika i programowanie. Wykład 2 inż. Barbara Fryc Wyższa Szkoła Informatyki i Zarządzania w Rzeszowie

wykład V uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C++ klasy i obiekty wykład V dr Jarosław Mederski Spis Język C++ - klasy

Wstęp do programowania

Składnia C++ Programowanie Obiektowe Mateusz Cicheński

> C++ dynamiczna alokacja/rezerwacja/przydział pamięci. Dane: Iwona Polak. Uniwersytet Śląski Instytut Informatyki

Programowanie w C++ Wykład 3. Katarzyna Grzelak. 12 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 35

Język C++ Różnice między C a C++

I - Microsoft Visual Studio C++

Laboratorium nr 9. Temat: Wskaźniki, referencje, dynamiczny przydział pamięci, tablice dynamiczne. Zakres laboratorium:

DYNAMICZNE PRZYDZIELANIE PAMIECI

Wskaźniki. Przemysław Gawroński D-10, p marca Wykład 2. (Wykład 2) Wskaźniki 8 marca / 17

Funkcje przeciążone, konstruktory kopiujące, argumenty domyślne

#include "stdafx.h" #include <iostream> #include "windows.h" using namespace std;

Wskaźnik może wskazywać na jakąś zmienną, strukturę, tablicę a nawet funkcję. Oto podstawowe operatory niezbędne do operowania wskaźnikami:

Podstawy algorytmiki i programowania - wykład 2 Tablice dwuwymiarowe cd Funkcje rekurencyjne

Programowanie obiektowe w C++ Wykład 12

Programowanie 2. Język C++. Wykład 9.

Plik klasy. h deklaracje klas

TEMAT : KLASY POLIMORFIZM

Materiał. Typy zmiennych Instrukcje warunkowe Pętle Tablice statyczne Funkcje Wskaźniki Referencje Tablice dynamiczne Typ string Przeładowania funkcji

Podstawy algorytmiki i programowania - wykład 5 C-struktury cd.

Alokacja pamięci dla tablicy dwuwymiarowej

Wstęp do programowania

W2 Wprowadzenie do klas C++ Klasa najważniejsze pojęcie C++. To jest mechanizm do tworzenia obiektów. Deklaracje klasy :

Projektowanie klas c.d. Projektowanie klas przykład

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

typ y y p y z łoż o on o e n - tab a lice c e w iel e owym m ar a o r we, e stru r kt k ury

wykład II uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C - funkcje, tablice i wskaźniki wykład II dr Jarosław Mederski Spis

Wprowadzenie do programowania i programowanie obiektowe

Składnia C++ Programowanie Obiektowe Mateusz Cicheński

Programowanie - wykład 4

Programowanie komputerowe. Zajęcia 4

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 5

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

KURS C/C++ WYKŁAD 8. Deklaracja funkcji informuje komplilator jaką wartość funkcja będzie zwracała i jakiego typu są jej argumenty.

Wstęp do informatyki- wykład 11 Funkcje

Wskaźniki. nie są konieczne, ale dają językowi siłę i elastyczność są języki w których nie używa się wskaźników typ wskaźnikowy typ pochodny:

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

Programowanie 2. Język C++. Wykład 1.

Rozwiązanie. #include <cstdlib> #include <iostream> using namespace std;

Wstęp do informatyki- wykład 9 Funkcje

MACIERZE. Sobiesiak Łukasz Wilczyńska Małgorzata

Programowanie w języku C++

Wykład II. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej

Programowanie Obiektowew języku C++ Zadania L4

Podstawy programowania w języku C++

Informacje wstępne #include <nazwa> - derektywa procesora umożliwiająca włączenie do programu pliku o podanej nazwie. Typy danych: char, signed char

Programowanie Obiektowew języku C++ Zadania L4

Programowanie proceduralne w języku C++ Funkcje

> C++ wskaźniki. Dane: Iwona Polak. Uniwersytet Śląski Instytut Informatyki 26 kwietnia 2017

Szablon klasy std::vector

Programowanie 2. Język C++. Wykład 2.

Wstęp do programowania. Dariusz Wardecki, wyk. X

Podstawy Programowania Obiektowego

Zajęcia nr 5 Algorytmy i wskaźniki. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej

Podstawy programowania 1

Programowanie w języku C++

Wstęp do informatyki- wykład 12 Funkcje (przekazywanie parametrów przez wartość i zmienną)

Podstawy programowania skrót z wykładów:

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

wykład IV uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C, a C++. wykład IV dr Jarosław Mederski Spis Język C++ - wstęp

Programowanie obiektowe w języku C++ dr inż. Jarosław Forenc

Wskaźniki. Informatyka

tablica: dane_liczbowe

Wykład I. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej

Programowanie w C++ Wykład 8. Katarzyna Grzelak. 7 maja K.Grzelak (Wykład 8) Programowanie w C++ 1 / 31

Programowanie i struktury danych

Programowanie obiektowe w C++ Wykład 1

Zajęcia 6 wskaźniki i tablice dynamiczne

Programowanie w C++ Wykład 2. Katarzyna Grzelak. 5 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 41

Podstawy informatyki. Informatyka stosowana - studia niestacjonarne. Grzegorz Smyk. Wydział Inżynierii Metali i Informatyki Przemysłowej

Operacje wejścia/wyjścia odsłona pierwsza

Materiał Typy zmiennych Instrukcje warunkowe Pętle Tablice statyczne Wskaźniki Tablice dynamiczne Referencje Funkcje

Język C++ wykład VI. uzupełnienie notatek: dr Jerzy Białkowski. Programowanie C/C++ Język C++ wykład VI. dr Jarosław Mederski.

Podstawy algorytmiki i programowania - wykład 1 Tablice powtórzenie Tablice znaków Tablice dwuwymiarowe

Globalne / Lokalne. Wykład 15. Podstawy programowania (język C) Zmienne globalne / lokalne (1) Zmienne globalne / lokalne (2)

Wstęp do informatyki- wykład 9 Pętla while, do while,for -pętla w pętli- przykłady Funkcje

PDF stworzony przez wersję demonstracyjną pdffactory Pro Program 15

ISO/ANSI C - funkcje. Funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje

Programowanie w C++ Wykład 2. Katarzyna Grzelak. 4 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 44

Podstawy informatyki. Informatyka stosowana - studia niestacjonarne. Grzegorz Smyk. Wydział Inżynierii Metali i Informatyki Przemysłowej

Wstęp do Programowania 2

ZASADY PROGRAMOWANIA KOMPUTERÓW

Przekazywanie argumentów wskaźniki

Transkrypt:

Techniki Programowania wskaźniki 2 Łukasz Madej Katedra Informatyki Stosowanej i Modelowania Wykłady opracowane we współpracy z Danutą Szeligą, Łukaszem Sztangretem

Jeżeli wskaźnik pokazuje na element tablicy można użyć go zgodnie z notacją typową dla tablic: double tab[5] = -2,-1,0,1,2; double * ptr; ptr = &tab[0]; // lub: ptr = tab; for (int i = 0; i < 5; i++) cout << ptr[i] << ' ' << tab[i] << endl; -2,-1,0,1,2-2,-1,0,1,2

Wskaźnik taki można przesuwać po elementach tablicy: double tab[5] = -2,-1,0,1,2; ptr++; for (int i = 0; i < 4; i++) cout << *ptr << ' ' << tab[i] << endl; ptr++; -1,0,1,2-2,-1,0,1

#include<iostream> using namespace std; int main() int tab[]=0,1,2,3,4; int *wsk1,*wsk2; wsk1=&tab[1]; wsk2=&tab[4]; cout << wsk2-wsk1 << endl; 3

int main() int tab[5]=1,2,3,4,5; int *wsk; wsk=tab; for (int i=0;i<5;i++) cout<<*wsk<<"\t"<<wsk<<endl; wsk++;

Wskaźniki i const zwykły wskaźnik: stały wskaźnik int *wsk int * const wsk wskaźnik do obiektu stałego const int * wsk stały wskaźnik do stałego obiektu const int * const wsk

Stały wskaźnik #include<iostream> using namespace std; int main() int a=5,b=10; int * const w=&a; cout << *w << endl; (*w)++; cout << *w << endl; w=&b; cout << *w << endl; 5 6 błąd

Wskaźnik do obiektu stałego int main() const int a=5,b=10; const int *st_w; int *zm_w; st_w=&a; cout << *st_w << endl; st_w=&b; cout << *st_w << endl; (*st_w)++; zm_w=&a; błąd błąd

Stały wskaźnik do stałego obiektu int main() const int a=5,b=10; const int * const st_w=&a; cout << *st_w << endl; //(*st_w)++; //st_w=&b; BŁĄD BŁĄD

Dynamiczne tworzenie tablic 1D 2D 3D int *w=new int[n]; int **w = new int*[n]; for(int i=0;i<n;i++) w[i] = new int[m]; int ***w = new int**[n]; for(int i=0;i<n;i++) w[i] = new int*[m]; for(int i=0;i<n;i++) for(int j=0;j<m;j++) w[i][j] = new int[o];

Usuwanie tablic 1D 2D 3D delete [] w; for(int i=0;i<n;i++) delete [] w[i]; delete [] w; for(int i=0;i<n;i++) for(int j=0;j<m;j++) delete [] w[i][j]; for(int i=0;i<n;i++) delete [] w[i]; delete [] w;

Dynamiczne tworzenie tablic #include<iostream> using namespace std; int main() int n; cout << "Podaj rozmiar tablicy\n"; cin >> n; int *w=new int[n]; for (int i=0; i<n; i++) cout << "Podaj wartosc\n"; cin >> w[i]; for (int i=0; i<n; i++) cout << *(w+i) << endl; delete [] w;

Dynamiczne tworzenie tablic 2-D #include<iostream> using namespace std; int main() int n; cout << "Podaj rozmiar\n"; cin >> n; int **wsk=new int*[n]; for (int i=0; i<n; i++) wsk[i]=new int[n]; for (int i=0; i<n; i++) for (int j=0; j<n; j++) wsk[i][j]=i*n+j; for (int i=0; i<n; i++) for (int j=0; j<n; j++) cout<<wsk[i][j]<<"\t"; cout << endl; for(int i=0;i<n;i++) delete [] wsk[i]; delete [] wsk;

Wskaźniki w argumentach funkcji #include<iostream> using namespace std; void podwoj(int *wsk); int main() int a; cout << "Podaj liczbe\n"; cin >> a; cout << "\na = " << a << endl; podwoj(&a); cout << "a = " << a << endl; void podwoj(int *wsk) *wsk*=2; 5 10

Wskaźnik do funkcji Funkcję można wywołać lub można pobrać jej adres (miejsce, gdzie jej kod zaczyna się w pamięci). W wyniku wywołania zaczyna się wykonywać kod tej funkcji: q = fun(x, 7); W wyniku pobrania adresu funkcji uzyskuje się wskaźnik do tej funkcji: pfun = &fun; Wskaźnika tego można użyć do wywołania funkcji: q = (*pfun)(x, 7)

Wskaźnik do funkcji Definicja: funkcji fun typu T (T1, T2,...): T fun(t1, T2,...)... ; wskaźnika pf (do tej funkcji) typu T (*)(T1, T2,...): T (*pf)(t1, T2,...); int (*pf)(double, char); Ustawienie (dwa alternatywne sposoby): pf = fun; pf = &fun; Użycie (wywołanie funkcji przez wskaźnik): int res; double x; char y; res = (*pf)(x, y);

Wskaźnik do funkcji #include<iostream> using namespace std; int podwoj(int a); int potroj(int a); int main() int a, (*fun)(int a); a=10; fun=podwoj; cout << (*fun)(a) << endl; fun=potroj; cout << (*fun)(a) << endl; int podwoj(int a) return (a*2); int potroj(int a) return (a*3);

Funkcja zwracająca tablicę int *fun() static int tab[5]; for (int i=0; i<5; i++) tab[i]=i; return tab; 0 1 2 3 4 int main() int *w; w=fun(); for (int i=0; i<5; i++) cout << w[i] << endl;

Funkcja zwracająca tablicę int *fun() int *wsk=new int[5]; for (int i=0; i<5; i++) wsk[i]=i; return wsk; 0 1 2 3 4 int main() int *w; w=fun(); for (int i=0; i<5; i++) cout << w[i] << endl;

Odbieranie tablic 2-D od funkcji #include<iostream> using namespace std; int **tworz(int n); int main() int **t, n; cout << "Podaj rozmiar macierzy\n"; cin >> n; t=tworz(n); for (int i=0; i<n; i++) for (int j=0; j<n; j++) cout << *(*(t+i)+j) << "\t"; //lub cout<<t[i][j]<<endl; cout << endl; int **tworz(int n) int **wsk=new int*[n]; for (int i=0; i<n; i++) wsk[i]=new int[n]; for (int i=0; i<n; i++) for (int j=0; j<n; j++) wsk[i][j]=i*n+j; return wsk;

Argumenty z linii wywołania programu #include<iostream> using namespace std; int main(int argc, char *argv[]) cout<<"dostalem parametrow: "<<argc<<endl<<endl; for (int i=0; i<argc; i++) cout<<i<<" parametr to\t"<<argv[i]<<endl; funkcja info 3.4 45.9 4 funkcja info 3.4 45.9

Argumenty z linii wywołania programu #include<iostream> #include<cstdlib> using namespace std; int main(int argc, char *argv[]) cout<<argv[2]<<"+"<<argv[3]<<"="; cout<<atof(argv[2])+atof(argv[4])<<endl; funkcja info 3.4 45.9 3.4 + 45.9 = 49.3

Czytanie deklaracji 1. Zaczynamy od nazwy. 2. Następnie poruszamy się w prawo. 3. Gdy napotkamy na nawias zamykający poruszamy się w lewo. 4. Jeżeli odczytaliśmy już wszystko w obrębie danego nawiasu wychodzimy na zewnątrz i znowu poruszamy się w prawo.

Co to jest a??? 1. int *(*(*a)(int))[10]; 2. int (*(*a())[10])(); 3. float (*(*a)(int))(double); 4. double (*(*(*a)())[10])();