PODSTAW PROGRAMOWANIA WYKŁAD 6 WSKAŹNIKI



Podobne dokumenty
Wskaźniki. Programowanie Proceduralne 1

Lab 9 Podstawy Programowania

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

Języki i metodyka programowania. Wskaźniki i tablice.

Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych.

main( ) main( void ) main( int argc, char argv[ ] ) int MAX ( int liczba_1, liczba_2, liczba_3 ) źle!

ŁAŃCUCHY W JĘZYKU C/C++

DYNAMICZNE PRZYDZIELANIE PAMIECI

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

Uzupełnienie dot. przekazywania argumentów

Tablice, funkcje, wskaźniki - wprowadzenie

Podstawy programowania. Wykład 6 Wskaźniki. Krzysztof Banaś Podstawy programowania 1

Techniki Programowania wskaźniki

DANE TEKSTOWE W JĘZYKU C/C++ - TABLICE ZNAKOWE

4) Operacje na tablicy dwuwymiarowej bez wykorzystywania indeksów liczbowych:

Wskaźniki. Informatyka

Wskaźniki w C. Anna Gogolińska

1 Wskaźniki i zmienne dynamiczne, instrukcja przed zajęciami

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

Tablice deklaracja, reprezentacja wewnętrzna

Wstęp do wskaźników w języku ANSI C

Programowanie Proceduralne

Operatory. Operatory bitowe i uzupełnienie informacji o pozostałych operatorach. Programowanie Proceduralne 1

KURS C/C++ WYKŁAD 6. Wskaźniki

Struktury - wprowadzenie

Podstawy programowania 1

Typy złożone. Struktury, pola bitowe i unie. Programowanie Proceduralne 1

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

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

Co to jest sterta? Sterta (ang. heap) to obszar pamięci udostępniany przez system operacyjny wszystkim działającym programom (procesom).

Tablice, funkcje - wprowadzenie

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:

wykład III uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C - zarządzanie pamięcią, struktury,

Ćwiczenie nr 6. Poprawne deklaracje takich zmiennych tekstowych mogą wyglądać tak:

Podstawy programowania. Wykład 6 Złożone typy danych: struktury, unie. Krzysztof Banaś Podstawy programowania 1

Wstęp do programowania INP001213Wcl rok akademicki 2018/19 semestr zimowy. Wykład 4. Karol Tarnowski A-1 p.

Programowanie I C / C++ laboratorium 02 Składnia pętli, typy zmiennych, operatory

Wyklad 7 Funkcje (c.d.). Tablice jednowymiarowe znaków

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

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

Podstawy programowania w języku C++

Podstawy programowania w języku C++

Struktury. Przykład W8_1

Podstawy programowania w języku C++

Lab 8. Tablice liczbowe cd,. Operacje macierzowo-wektorowe, memcpy, memmove, memset. Wyrażenie warunkowe.

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

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

Wstęp do programowania 1

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

Podstawy programowania komputerów

Struktura programu. Projekty złożone składają się zwykłe z różnych plików. Zawartość każdego pliku programista wyznacza zgodnie z jego przeznaczeniem.

Programowanie w elektronice: Podstawy C

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

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

PARADYGMATY PROGRAMOWANIA Wykład 3

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

nowe operatory &. (kropka) * operator rzutowy ->, (przecinek) sizeof

6 Przygotował: mgr inż. Maciej Lasota

Stałe i zmienne znakowe. Stała znakowa: znak

Podstawy programowania w języku C++

Struktury czyli rekordy w C/C++

//zmienne globalne int *pa, *pb; //wskaźniki globalne void main(void) { clrscr(); printf("\n podaj wartosc liczby a\n"); scanf("%d",&a); pa=&a;

Programowanie Komputerów

Wprowadzenie do programowania w języku C

Operacje na łańcuchach znaków

Wskaźniki. Przemysław Gawroński D-10, p Wykład 1. (Wykład 1) Wskaźniki / 9

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

Funkcja (podprogram) void

Struktury, unie, formatowanie, wskaźniki

Algorytmy i język C++

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

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

Laboratorium 6: Dynamiczny przydział pamięci. dr inż. Arkadiusz Chrobot dr inż. Grzegorz Łukawski

Algorytmy i złożoności. Wykład 3. Listy jednokierunkowe

Wprowadzenie do programowania w języku C

Dr inż. Grażyna KRUPIŃSKA. D-10 pokój 227 WYKŁAD 7 WSTĘP DO INFORMATYKI

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

Programowanie współbieżne Wykład 6. Iwona Kochaoska

Stałe, tablice dynamiczne i wielowymiarowe

dynamiczny przydział pamięci calloc() memset() memcpy( ) (wskaźniki!! )

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

ZASADY PROGRAMOWANIA KOMPUTERÓW

C-struktury wykład. Dorota Pylak

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

Referencje do zmiennych i obiektów

Tablice wielowymiarowe. Przykład tablica 2-wymiarowa. Przykład. Przykład 3-wymiarowy. Tak naprawdę nie istnieją w C! Rozważmy tablicę o rozmiarze 3x2

PARADYGMATY PROGRAMOWANIA Wykład 4

Podstawy programowania w języku C++

Zmienne, stałe i operatory

2 Przygotował: mgr inż. Maciej Lasota

Języki programowania. Przetwarzanie tablic znaków. Część druga. Autorzy Tomasz Xięski Roman Simiński

referencje Wykład 2. Programowanie (język C++) Referencje (1) int Num = 50; zdefiniowano zmienną Num (typu int) nadając jej wartość początkową 50.

Strona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta Strona 1 z 26. Powrót. Full Screen. Zamknij.

Programowanie komputerowe. Zajęcia 4

Zaawansowane programowanie w języku C++ Biblioteka standardowa

Typy wyliczeniowe Konwersje napis <-> liczba Struktury, unie Scanf / printf Wskaźniki

Ćwiczenie 4 z Podstaw programowania. Język C++, programy pisane w nieobiektowym stylu programowania. Zofia Kruczkiewicz

Wykład nr 3. Temat: Wskaźniki i referencje. Edward Morgan Forster

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

Instrukcje sterujące. Programowanie Proceduralne 1

Transkrypt:

PODSTAW PROGRAMOWANIA WYKŁAD 6 WSKAŹNIKI Wskaźnik jest zmienną, która zawiera adres (wskazanie) początku dowolnego obszaru w pamięci komputera, (np. może być to adres obszaru danych lub adres kodu programu) Ogólna postać definicji wskaźnika: typ_danych identyfikator wskaźnika ; Podstawowe zastosowania wskaźników to: 1. przekazywanie przez wskaźnik zmiennej jako argumentu funkcji, 2. dynamiczny przydział pamięci, 3. operacje arytmetyczne na wskaźnikach. 4. Wskaźniki używane do dostępu do tablic 1. przekazywanie przez wskaźnik zmiennej jako argumentu funkcji, int wartosc( int x ); void wskaznik (int *x); int main() int x = 1; int y; y = wartosc(x); printf("wartosc x po wywolaniu funkcji wartosc: %d\n", x); wskaznik(&x); printf("wartosc x po wywolaniu funkcji wskaznik: %d\n", x); int wartosc( int x ) x++; return x; void wskaznik (int *x)

(*x)++; #include<stdio.h> #include<stdlib.h> void f1(int x); void f2(int* x); void f3(int** x); void f4(int& x); int main() int i,j,*k,*l,*m,n; k=(int*)malloc(sizeof(int)); l=(int*)malloc(sizeof(int)); m=(int*)malloc(sizeof(int)); i=j=*k=*l=*m=n=2; (*m)--; f1(i); f2(&j); f2(k); f3(&l); f4(n); printf("%d\n%d\n%d\n%d\n%d",i,j,*k,*l,n); free(k); free(l); free(m); void f1(int x) x--; void f2(int* x) (*x)++; void f3(int** x) *x+=sizeof(int); void f4(int& x) x*=2;

2. dynamiczny przydział pamięci, malloc() (stdlib.h) przydział n bajtów pamięci void * memcpy ( void * destination, const void * source, size_t num ); /* memcpy example */ struct char name[40]; int age; person, person_copy; int main () char myname[] = "Pierre de Fermat"; /* using memcpy to copy string: */ memcpy ( person.name, myname, strlen(myname)+1 ); person.age = 46; /* using memcpy to copy structure: */ memcpy ( &person_copy, &person, sizeof(person) ); printf ("person_copy: %s, %d \n", person_copy.name, person_copy.age ); int memcmp ( const void * ptr1, const void * ptr2, size_t num ); /* memcmp example */ int main () char buffer1[] = "DWgaOtP12df0"; char buffer2[] = "DWGAOTP12DF0"; int n; n=memcmp ( buffer1, buffer2, sizeof(buffer1) );

if (n>0) printf ("'%s' is greater than '%s'.\n",buffer1,buffer2); else if (n<0) printf ("'%s' is less than '%s'.\n",buffer1,buffer2); else printf ("'%s' is the same as '%s'.\n",buffer1,buffer2); void * memset ( void * ptr, int value, size_t num ); void * memmove ( void * destination, const void * source, size_t num ); memmove example */ int main () char str[] = "memmove can be very useful..."; memmove (str+20,str+15,11); puts (str); Ze wskaźnikami i adresami związane są dwa operatory: operator referencji & zwracający adres zmiennej podanej po prawej stronie tego operatora. operator dereferencji identyfikujący obszar wskazywany przez wskaźnik podany po prawej stronie tego operatora. int liczba ; int wskaźnik ; wskaznik = &liczba; wskaźnik = 10; // przypisanie zmiennej wskaźnik // adresu zmiennej liczba // przypisanie 10 zawartości zmiennej // wskazywanej przez wskaźnik // tutaj równoważne liczba = 10 Arytmetyka wskaźników Na wskaźnikach mogą być wykonywane następujące operacje: * przypisania ( = ) wsk = wskaznik_zmiennej_lub_obszaru_pamięci ; (w przypadku niezgodności typów konieczne jest dokonanie konwersji typu) * operacje porównania ( ==,!=, <, >, <=, >= ):

wsk_1 == wsk_2 // sprawdzenie czy zmienne zawierają te same adresy wsk_1 < wsk_2 // czy zmienna wsk_1 zawiera adres mniejszy // od adresu zawartego w zmiennej wsk_2 * operacje powiększania lub pomniejszania wskaźnika ( +, -, ++, --, +=, -= ) o liczbę całkowitą (tylko dla wskaźników zdefiniowanych) - powiększenie (pomniejszenie) wskaźnika o wartość N powoduje wyznaczenie adresu przesuniętego o: N - sizeof( typ_zmiennej_wskazywanej ) //Program 4 void main() char i[3]=5,6,7,*wskaznik; wskaznik=&(i[0]); *wskaznik/=2; (*wskaznik)+=9; (*wskaznik)*=13; printf("%d %d %d",i[0],i[1],i[2]); void main() char i[3]=5,6,7,*wskaznik; wskaznik=&(i[0]); *wskaznik/=2; (*wskaznik)+=9; (*wskaznik)*=13; printf("%d %d %d",i[0],i[1],i[2]); Najczęściej arytmetykę wskaźników stosuje się do dynamicznych odpowiedników tablic. Najczęstszym i najważniejszym zastosowaniem operacji arytmetycznych jest przeglądanie (iterowanie) struktur danych w szczególności tablic/łańcuchów znaków. Wykorzystuje się do tego celu głównie operator inkrementacji ++. Do wskaźników można też dodawać dowolną liczbę całkowitą, a także odejmować od nich

dowolną liczbę całkowitą. Dla przykładu zdefiniujemy wskaźnik, do którego przypiszemy adres początku tablicy. int *wskaznik = tablica; // trzeba pamiętać, że zapis tablica jest równoważny z &tablica[0], czyli oznacza adres jej początku void odwrocenie (char *s); int main() char ciag_znakow[20] = "Rychu ma bimber"; odwrocenie(ciag_znakow); printf("ciag znakow po odwroceniu: %s\n", ciag_znakow); void odwrocenie(char *s) char *wsk = s + strlen(s)-1; char temp; for (;wsk>s;wsk--,s++) temp = *s; *s = *wsk; *wsk = temp;