Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Jerzy F. Kotowski1 Informatyka I Wykład 12 GOSPODARKA PAMIĘCIĄ, STRUMIENIE (i nie tylko)

Podobne prezentacje


Prezentacja na temat: "Jerzy F. Kotowski1 Informatyka I Wykład 12 GOSPODARKA PAMIĘCIĄ, STRUMIENIE (i nie tylko)"— Zapis prezentacji:

1 Jerzy F. Kotowski1 Informatyka I Wykład 12 GOSPODARKA PAMIĘCIĄ, STRUMIENIE (i nie tylko)

2 Jerzy F. Kotowski2 TROCHĘ TAJEMNIC u char A[12]=Ala ma kota; Ala ma kotaobiekt A[12] kopiowanie u char *B=Ala ma kota; Ala ma kota wskaźnik *B Adres u printf(Ala ma kota); - argumentem jest adres!! u char C[ ]=Ala ma kota; - policz sobie sam ?!?! C[ ]

3 Jerzy F. Kotowski3 Uchylanie (rąbka) tajemnicy type *ident; type ident[ ]; u Przykład: double Ula[ ]; double *Ula; Użycie identyczne jak w przypadku prawdziwej tablicy: Ula[1]; Ela[1]; u Dodatkowa możliwość: int Ula[ ] = {3,5.3,4.1,-5}; int *Ala = {3,5.3,4.1,-5}; int Ela[4] = {3,5.3,4.1,-5}; Ala++; OK!! Ula++; !!! ERROR Ela++; !!! ERROR Są to konsekwencje wzoru a[i] *(a + i) 12_1

4 Jerzy F. Kotowski4 Uchylanie tajemnicy c.d. u char s[3][5] = {Ala, ma, kota}; Alas[0]makotas[1]s[2] Kopiowanie do kolejnych wierszy tablicy s u char ss[ ][5] = {Ala, ma, kota}; - policz sam!? u Alternatywa: char *v[3] = {Ala, ma, kota}; - v jest tablicą wskaźników do obiektów typu char. Alav[0]makotav[1]v[2] Podstawianie adresów do wskaźników u Użycie identyczne: v[0][0]=E;v[2][2]=s;

5 Jerzy F. Kotowski5 Dynamiczna alokacja pamięci u double *p = malloc(100*sizeof(double)); u Prototyp w alloc.h i w stdlib.h: void *malloc(size_t size); u (...Returns a pointer to the newly allocated block, or NULL if not enough space exists for the new block…) u Inne funkcje (wybrane): allocmem farmalloc calloc free u Wybór funkcji zależeć może od potrzeb oraz używanego modelu pamięci: Tiny Small Medium Compact Large Huge

6 Jerzy F. Kotowski6 Dynamiczna alokacja pamięci - C++ u double *p = new double[100]; u Składnia: pointer_to_name = new name [name_initializer]; u Niesamowicie ważne: The storage duration ot the new object is from the point of creation until the operator delete deallocates its memory, or until the end of the program. u To znaczy, że zajęty obszar trzeba koniecznie zwalniać własnymi rękoma: delete(p); u new delete - operatory jednoargumentowe (wiadomo jaki prirytet) języka C++

7 Jerzy F. Kotowski7 Przykłady użycia u Składnia C:char *Ala = malloc(12); strcpy(Ala,Ala ma kota); Ala[0]=U; free(Ala); u Składnia C++:char *Ala = new char[12]; strcpy(Ala,Ala ma kota); Ala[0]=U; delete(Ala); u Narzędzia muszą być do pary, tzn.: malloc - free new - delete

8 Jerzy F. Kotowski8 Program info_12_2.cpp u F-cja void menu(void) u oraz void menu(void) u Tab. jednowymiarowa void error(char *tekst) Wywołanie funkcji scanf Zwalnianie pamięci u Tablica dwuwymiarowa Tablica adresów do wierszy jest automatyczna Można zapomnieć o zwol- nieniu zajętego obszaru u Pełne szaleństwo Tablica adresów jest zakładana dynamicznie Nie wolno zapominać o zwalnianiu pamięci - może to być trudne u Niech żyje destruktor!!! u Zachowanie funkcji scanf przy wprowadza- niu kilku wyrazów. u Bufor klawiatury 12_2

9 Jerzy F. Kotowski9 Strumienie wejściowe i wyjściowe u Otoczenie procesora: Wejście –klawiatura –dysk –mysz –skaner Wyjście –monitor –drukarka –dysk u Strumienie - predefined streams automatically opened when the program is started. stdin standard input device stdout standard output devive stdprn standard printer ………….. nasze własne (np. pliki).

10 Jerzy F. Kotowski10 Obsługa strumienia wyjściowego u Wprowadzanie do strumienia wyjściowego czym(gdzie, jak, co); int fprintf(FILE *stream, char *format [, arg,…]); fprintf(stdout,Ala ma kota); printf(Ala ma kota); fprintf(stdprn,Ala ma kota); - wydruk na drukarkę FILE *f = fopen(Ala.cpp,a); fprintf(f,Ala ma kota); fclose(f); FILE *fopen(const char *filename, const char *mode); Tryby: r w a b t

11 Jerzy F. Kotowski11 Obsługa strumienia wejściowego u Wczytywanie ze strumienia wyjściowego czym(skąd, jak, co); int fscanf(FILE *stream, char *format[, adress,…]); fscanf(stdin,%d,&i); scanf(%d,&i); u Przykład: char ss[100]; FILE *f = fopen(dane,rt); fscanf(f,%s,ss); fclose(f);

12 Jerzy F. Kotowski12 Kilka funkcji do odczytu ze strumieni a z klawiatury w szczególności u int getc(FILE *stream); gets one character from a stream u int getchar(void); gets character from stdin. It is line buffered. This means it will not return until you press ENTER. u int getch(void); int getche(void); (echo) gets character from console. It is line buffered. This means it will not return until you press ENTER. u int bioskey(int cmd); Keyboard interface

13 Jerzy F. Kotowski13 Kilka przykładów u Program inf_12_3.cpp u tekst_z_klawiatury czyta bufor klawiatury u Odczyt rozpoczyna naciśnięcie ENTER. u Pobieranie znaków kończy pobranie znaku char c - 2 argument u W buforze może coś zostać u Program inf_12_4.cpp u GetKey - naciśnięte klawisze u Można przetestować samemu. #define F #define Shift_F #define Ctrl_F #define Esc 27 ………………………… switch(p) { case F1: ………………. case Ctrl_F1: ………………. case Esc:

14 Jerzy F. Kotowski14 Merry Christmas and a Happy New Year 2006


Pobierz ppt "Jerzy F. Kotowski1 Informatyka I Wykład 12 GOSPODARKA PAMIĘCIĄ, STRUMIENIE (i nie tylko)"

Podobne prezentacje


Reklamy Google