6 Przygotował: mgr inż. Maciej Lasota

Podobne dokumenty
Lab 9 Podstawy Programowania

int tab[5]; tab[1]; ciągły obszar pamięci, w którym umieszczone są elementy tego samego typu macierz [ ] - dwuargumentowy operator indeksowania

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

2 Przygotował: mgr inż. Maciej Lasota

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

Struktury - wprowadzenie

Wskaźniki. Programowanie Proceduralne 1

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

Stałe, tablice dynamiczne i wielowymiarowe

5 Przygotował: mgr inż. Maciej Lasota

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

Tablice, funkcje, wskaźniki - wprowadzenie

część 8 wskaźniki - podstawy Jarosław Gramacki Instytut Informatyki i Elektroniki Podstawowe pojęcia

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

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

Język C zajęcia nr 11. Funkcje

Tablice, funkcje - wprowadzenie

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

ZASADY PROGRAMOWANIA KOMPUTERÓW

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

Tablice i struktury. czyli złożone typy danych. Programowanie Proceduralne 1

Podstawy programowania w języku C++

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

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

Laboratorium nr 10. Temat: Funkcje cz.2.

Tablicę 2-wymiarową można przedstawić jako pewien zestaw tablic 1-wymiarowych np.:

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

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

INFORMATYKA Studia Niestacjonarne Elektrotechnika

Spis treści WSKAŹNIKI. DYNAMICZNY PRZYDZIAŁ PAMIĘCI W JĘZYKU C. Informatyka 2. Instrukcja do pracowni specjalistycznej z przedmiotu

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

Język C, tablice i funkcje (laboratorium, EE1-DI)

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

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

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

Wskaźniki. Informatyka

Podstawy programowania 2. Przygotował: mgr inż. Tomasz Michno

Język C, tablice i funkcje (laboratorium)

Zmienne i struktury dynamiczne

Wskaźniki w C. Anna Gogolińska

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

Podstawy informatyki. Wykład nr 1 ( ) Politechnika Białostocka. - Wydział Elektryczny. dr inŝ. Jarosław Forenc

Dynamiczny przydział pamięci w języku C. Dynamiczne struktury danych. dr inż. Jarosław Forenc. Metoda 1 (wektor N M-elementowy)

/* dołączenie pliku nagłówkowego zawierającego deklaracje symboli dla wykorzystywanego mikrokontrolera */ #include <aduc834.h>

Powyższe wyrażenie alokuje 200 lub 400 w zależności od rozmiaru int w danym systemie. Wskaźnik wskazuje na adres pierwszego bajtu pamięci.

Wskaźniki a tablice Wskaźniki i tablice są ze sobą w języku C++ ściśle związane. Aby się o tym przekonać wykonajmy cwiczenie.

Język C zajęcia nr 12. Struktury i unie

Podstawy programowania. Wykład: 8. Wskaźniki. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

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

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

Podstawy programowania. Wykład 7 Tablice wielowymiarowe, SOA, AOS, itp. Krzysztof Banaś Podstawy programowania 1

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

Wymiar musi być wyrażeniem stałym typu całkowitego, tzn. takim, które może obliczyć kompilator. Przykłady:

Podstawy Programowania C++

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

Wykład 3 Składnia języka C# (cz. 2)

Wykład 1: Wskaźniki i zmienne dynamiczne

W dowolnym momencie można zmienić typ wskaźnika.

DYNAMICZNE PRZYDZIELANIE PAMIECI

Algorytmy i język C++

Spis treści WSKAŹNIKI. DYNAMICZNY PRZYDZIAŁ PAMIĘCI W JĘZYKU C. Informatyka 2. Instrukcja do pracowni specjalistycznej z przedmiotu

3 Przygotował: mgr inż. Maciej Lasota

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

Program 22. #include <iostream> using namespace std; struct Osoba { string Imie; string Nazwisko; char Plec; int RokUr; };

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

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 8. Karol Tarnowski A-1 p.

Podstawy programowania w języku C++

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

Argumenty wywołania programu, operacje na plikach

Uniwersytet Zielonogórski Instytut Sterowania i Systemów Informatycznych. Ćwiczenie 3 stos Laboratorium Metod i Języków Programowania

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

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

TABLICE W JĘZYKU C/C++ typ_elementu nazwa_tablicy [wymiar_1][wymiar_2]... [wymiar_n] ;

Spis treści JĘZYK C - WSKAŹNIKI, DYNAMICZNY PRZYDZIAŁ PAMIĘCI. Informatyka 2. Instrukcja do pracowni specjalistycznej z przedmiotu

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

Informatyka I. Wykład 4. Tablice. Dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

Podstawy Programowania. Specyfikacja funkcji, operacje wejścia i wyjścia na plikach, rekurencja, tablice i wskaźniki

Wstęp. do języka C na procesor (kompilator RC51)

Część 4 życie programu

Podstawy programowania 2. Temat: Wprowadzenie do wskaźników. Przygotował: mgr inż. Tomasz Michno

Wstęp do Programowania, laboratorium 02

Techniki Programowania wskaźniki

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

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

tablica: dane_liczbowe

Podstawy programowania komputerów

KURS C/C++ WYKŁAD 7. struct Punkt { int x, y; int kolor; };

Podstawy programowania w języku C

Niezwykłe tablice Poznane typy danych pozwalają przechowywać pojedyncze liczby. Dzięki tablicom zgromadzimy wiele wartości w jednym miejscu.

7 Przygotował: mgr inż. Maciej Lasota

IX. Wskaźniki.(3 godz.)

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

Referencje. Programowanie w C/C++ Zasady zaliczeń. Zasady zaliczeń. Zasady zaliczeń. Zasady zaliczeń. Informacje organizacyjne: Krzysztof Trojanowski

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

Wykład 8: klasy cz. 4

Podstawy Informatyki sem. I 2014/2015 studia zaoczne Elektronika i Telekomunikacja!

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

Proste algorytmy w języku C

Programowanie komputerowe. Zajęcia 4

Tablice mgr Tomasz Xięski, Instytut Informatyki, Uniwersytet Śląski Katowice, 2011

Transkrypt:

Laboratorium nr 6 1/5 Język C Instrukcja laboratoryjna Temat: Wskaźniki. 6 Przygotował: mgr inż. Maciej Lasota 1) Wskaźniki. Wskaźniki (zmienne wskaźnikowe) stanowią jedno z fundamentalnych pojęć języka C. Wskaźnik jest to zmienna przechowująca adres (znajdujący się w pamięci operacyjnej komputera) innej zmiennej, tablicy lub funkcji (zadeklarowanej w programie). W języku C często wykorzystuje się wskaźniki, ze względu na to że jest to czasami jedyny sposób przedstawienia algorytmu obliczenia, częściowo zaś dlatego że ich użycie zwykle prowadzi do bardziej zwartego i efektywnego kodu. Deklaracja zmiennej wskaźnikowej polega na podaniu typu danych na jaki będzie wskaźnik wskazywał oraz podaniu gwiazdki * przed nazwą zmiennej. Często stosuje się ujednolicone nazewnictwo zmiennych wskaźnikowych (np. dopisując do każdej zmiennej _ptr, _wsk itp.) w celu wyeliminowania późniejszych pomyłek. Deklaracja zmiennej wskaźnikowej: [typ danych] *[nazwa zmiennej wskaźnikowej]; int wiek; char znak; int *wiek_wsk; char *znak_wsk; //zwykle zmienne //zwykle zmienne //zmienne wskaznikowe //zmienne wskaznikowe Do zarządzania wskaźnikami wykorzystujemy dwa specjalne operatory. Pierwszym operatorem jest operator gwiazdki *, drugim zaś operator ampersand &. * - operator dereferencji, czyli operator odwołania się danych wskazywanych przez dany wskaźnik. & - operator pobrania adresu (zmiennej, struktury, tablicy itp.).

Laboratorium nr 6 2/5 int main(void) int temp; int *wskaznik; temp = 100; printf("liczba w zmiennej TEMP: %d\n",temp); wskaznik = &temp; *wskaznik = 200; // przypisujemy wskaznikowi // adres zmiennej TEMP // pod adres wskaznika // przypisujemy wartosc 200 printf("liczba wskazywana przez wskaznik: %d\n",*wskaznik); 2) Wskaźniki a tablice jednowymiarowe. W języku C zacierają się różnice istniejące pomiędzy wskaźnikami i tablicami, w wielu przypadkach traktowane są tak samo. Wykonywana jest automatyczna konwersja między nimi. Elementy tablicy podczas tworzenia (uruchamiania programu) przypisywane są do kolejnych adresów w pamięci. Oznacza to że pierwszy element tablicy może znajdować się pod adresem 0xFF1000, natomiast kolejne elementy analogicznie pod adresami 0xFF1001, 0xFF1002,... itd. Taki sposób alokacji pamięci dla tablic w programach napisanych w języku C, pozwala na odnalezienie danego elementu tablicy za pomocą indeksów lub za pomocą wskaźników. int tab[4]=20,40,50,100; int *wsk;

Laboratorium nr 6 3/5 wsk = &tab[0]; printf("element pierwszy tablicy --> %d\n",*wsk); wsk = wsk + 1; printf("element drugi tablicy --> %d\n",*wsk); wsk++; printf("element trzeci tablicy --> %d\n",*wsk); wsk++; *wsk = 200; printf("element czwarty tablicy --> %d\n",*wsk); 3) Wskaźniki a tablice wielowymiarowe. W języku C tablice wielowymiarowe, reprezentowane są jako tablice tablic (każdy element tablicy zawiera wskaźnik na tablicę). Zwiększenie liczby wymiarów tablicy zwiększa równocześnie poziom skomplikowania z punktu widzenia wskaźników. int macierz[4][4] = 3,2,1,0, 5,9,0,3, 1,2,8,4, 2,5,6,7 ; printf("macierz: \t%p\t\tmacierz+1: \t%p\n",macierz,macierz+1); printf("macierz[0]: \t%p\t\tmacierz[0]+1: \t%p\n",macierz[0],macierz[0]+1); printf("*macierz: \t%p\t\t*macierz+1: \t%p \n",*macierz,*macierz+1); printf("macierz[0][0]: \t%d\n",macierz[0][0]); printf("macierz[1][1]: \t%d\n",macierz[1][1]); printf("macierz[2][3]: \t%d\n",macierz[2][3]);

Laboratorium nr 6 4/5 printf("*macierz[0]: \t%d\n",*macierz[0]); printf("*macierz[1]: \t%d\n",*macierz[1]); printf("*macierz[2]: \t%d\n",*macierz[2]); printf("**macierz: \t%d\n",*macierz[0]); printf("*(*macierz+1): \t%d\n",*(*macierz+1)); printf("*(*macierz+2): \t%d\n",*(*macierz+2)); printf("**macierz: \t\t%d\n",*macierz[0]); printf("*(*(macierz+1)+1): \t%d\n",*(*(macierz+1)+1)); printf("*(*(macierz+2)+3): \t%d\n",*(*(macierz+2)+3)); 4) Wskaźniki a funkcje. W języku C parametry do funkcji przekazywane są zawsze przez wartość (z wyjątkiem przekazywania tablic). Oznacza to, że w ciele funkcji operujemy jedynie na kopiach zmiennych. Czasami jednak w programie przydatna jest możliwość modyfikacji przekazywanych zmiennych. Przekazując do funkcji zamiast zwykłych zmiennych wskaźniki do tych zmiennych, mamy możliwość modyfikacji oryginalnych wartości przechowywanych przez zmienne w ciele funkcji. void sum(int *k, int *l, int *s) *s = (*k + *l); int a,b; int suma; printf("podaj liczbe a: "); scanf("%d",&a); printf("podaj liczbe b: "); scanf("%d",&b);

Laboratorium nr 6 5/5 sum(&a,&b,&suma); printf("suma: (%d + %d) = %d\n",a,b,suma); 5) Wskaźniki a struktury danych. W przypadku, gdy mamy zadeklarowany wskaźnik na strukturę danych, dostęp do poszczególnych składowych struktury odbywa się za pomocą tzw. notacji strzałkowej. Notacja ta polega na podaniu wskaźnika do struktury, -> (strzałki) oraz składowej do, której się odwołujemy struct data int dzien; int miesiac; int rok; data_urodzenia; struct data *wsk; wsk = &data_urodzenia; scanf( %d,&wsk->dzien); scanf( %d,&wsk->miesiac); scanf( %d,&wsk->rok); printf( Data urodzenia: %d-%d-%d\n,wsk->dzien,wsk->miesiac,wsk->rok);