Tablice, funkcje, wskaźniki - wprowadzenie
|
|
- Juliusz Jakubowski
- 6 lat temu
- Przeglądów:
Transkrypt
1 Tablice, funkcje, wskaźniki - wprowadzenie Przemysław Gawroński D-10, p. 234 Wykład 4 19 listopada 2018 (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
2 Outline 1 Tablice jednowymiarowe 2 Funkcje 3 Wskaźniki 4 Tablice a wskaźniki (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
3 Tablice jednowymiarowe Ogólna postać deklaracji tablicy jednowymiarowej: typ nazwa zmiennej [rozmiar]; (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
4 Tablice jednowymiarowe Ogólna postać deklaracji tablicy jednowymiarowej: typ nazwa zmiennej [rozmiar]; W standardzie C89 rozmiar tablicy: (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
5 Tablice jednowymiarowe Ogólna postać deklaracji tablicy jednowymiarowej: typ nazwa zmiennej [rozmiar]; W standardzie C89 rozmiar tablicy: musi być określony za pomocą stałego wyrażenia, (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
6 Tablice jednowymiarowe Ogólna postać deklaracji tablicy jednowymiarowej: typ nazwa zmiennej [rozmiar]; W standardzie C89 rozmiar tablicy: musi być określony za pomocą stałego wyrażenia, jest ustalany w czasie kompilacji. (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
7 Tablice jednowymiarowe Ogólna postać deklaracji tablicy jednowymiarowej: typ nazwa zmiennej [rozmiar]; W standardzie C89 rozmiar tablicy: musi być określony za pomocą stałego wyrażenia, jest ustalany w czasie kompilacji. Przykład: double tab[100]; //pierwsza komórka tablicy - tab[0], ostatnia komórka tablicy - tab[99] tab[2] = 12.23; //przypisane trzeciej komórce tablicy wartości. (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
8 Tablice jednowymiarowe Ogólna postać deklaracji tablicy jednowymiarowej: typ nazwa zmiennej [rozmiar]; W standardzie C89 rozmiar tablicy: musi być określony za pomocą stałego wyrażenia, jest ustalany w czasie kompilacji. Przykład: double tab[100]; //pierwsza komórka tablicy - tab[0], ostatnia komórka tablicy - tab[99] tab[2] = 12.23; //przypisane trzeciej komórce tablicy wartości. Standard C99 pozwala tworzyć tablice, których rozmiar określa się w czasie działania programu (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
9 Tablice znaków - łańcuchy W języku C łańcuch to jednowymiarowa tablica znaków zakończona znakiem końca łańcucha ( \0 ). (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
10 Tablice znaków - łańcuchy W języku C łańcuch to jednowymiarowa tablica znaków zakończona znakiem końca łańcucha ( \0 ). Przykład: char str[9]; // 8 znaków łańcucha plus znak końca łańcucha (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
11 Tablice znaków - łańcuchy W języku C łańcuch to jednowymiarowa tablica znaków zakończona znakiem końca łańcucha ( \0 ). Przykład: char str[9]; // 8 znaków łańcucha plus znak końca łańcucha Stała tekstowa tekst to t, e, k, s, t, \0. (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
12 Tablice znaków - łańcuchy W języku C łańcuch to jednowymiarowa tablica znaków zakończona znakiem końca łańcucha ( \0 ). Przykład: char str[9]; // 8 znaków łańcucha plus znak końca łańcucha Stała tekstowa tekst to t, e, k, s, t, \0. W przypadku stałych tekstowych znak końca łańcucha dopisywany jest automatycznie przez kompilator. (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
13 Tablice znaków - łańcuchy W języku C łańcuch to jednowymiarowa tablica znaków zakończona znakiem końca łańcucha ( \0 ). Przykład: char str[9]; // 8 znaków łańcucha plus znak końca łańcucha Stała tekstowa tekst to t, e, k, s, t, \0. W przypadku stałych tekstowych znak końca łańcucha dopisywany jest automatycznie przez kompilator. string.h (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
14 Inicjowanie tablic Ogólna postać inicjacji tablicy: typ nazwatab[rozmiar] = lista wartości; (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
15 Inicjowanie tablic Ogólna postać inicjacji tablicy: typ nazwatab[rozmiar] = lista wartości; Przykłady: int tab1 [3] = {2, 3, 4}; int tab2 [5] = {0}; int tab3 [ 123] = {1, 2, 3}; char znaki [8]={ A, B, C, D, E, _, G, \0 }; char tekst [8]= " _7"; (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
16 Tablice o nieokreślonym rozmiarze Przykład: char tek []= "\ ndlugi tekst, ktorego znakow nie chce mi sie liczyc.\n"; printf (" Tekst %s ma dlugosc %d\n", tek, tek / sizeof ( char )); sizeof (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
17 Tablice o nieokreślonym rozmiarze Przykład: char tek []= "\ ndlugi tekst, ktorego znakow nie chce mi sie liczyc.\n"; printf (" Tekst %s ma dlugosc %d\n", tek, tek / sizeof ( char )); sizeof Przykład: int tabs [] = {2, 3, 4, 5}; int roz = sizeof tabs / sizeof tabs [ 0]; int i; for (i =0; i<roz ; i ++) { tabs [i ]=(100* tab [i]-(i +28) ) %33; printf ("%d\n", tabs [i]); } (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
18 Tablice jednowymiarowe - idiomy Wczytywanie danych do tablicy # define SIZE int tab_a [ SIZE ], tab_b [ SIZE ]; for (i =0;i< SIZE ;i ++) scanf ("%d", & tab_a [i]); // scanf ("% d", tab_a +i); (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
19 Tablice jednowymiarowe - idiomy Wczytywanie danych do tablicy # define SIZE int tab_a [ SIZE ], tab_b [ SIZE ]; for (i =0;i< SIZE ;i ++) scanf ("%d", & tab_a [i]); // scanf ("% d", tab_a +i); Sumowanie elementów tablicy int sum =0; for (i =0;i< SIZE ;i ++) sum += tab_a [i]; (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
20 Tablice jednowymiarowe - idiomy Wczytywanie danych do tablicy # define SIZE int tab_a [ SIZE ], tab_b [ SIZE ]; for (i =0;i< SIZE ;i ++) scanf ("%d", & tab_a [i]); // scanf ("% d", tab_a +i); Sumowanie elementów tablicy int sum =0; for (i =0;i< SIZE ;i ++) sum += tab_a [i]; Kopiowanie elementów tablicy for (i =0;i< SIZE ;i ++) tab_b [i]= tab_a [i]; (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
21 Tablice jednowymiarowe W języku C nie ma żadnej kontroli przekroczenia zakresu tablicy. int licz [10], i; for (i =0;i <100; i ++) licz [i]=i; (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
22 Funkcje Funkcje to podstawowe części składowe każdego programu w języku C. (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
23 Funkcje Funkcje to podstawowe części składowe każdego programu w języku C. Ogólna postać definicji funkcji to: typ zwracany nazwa funkcji (list parm){ ciało funkcji } (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
24 Funkcje Funkcje to podstawowe części składowe każdego programu w języku C. Ogólna postać definicji funkcji to: typ zwracany nazwa funkcji (list parm){ ciało funkcji } Funkcja może zwrócić dane dowolnego typu z wyjątkiem tablic. (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
25 Funkcje Funkcje to podstawowe części składowe każdego programu w języku C. Ogólna postać definicji funkcji to: typ zwracany nazwa funkcji (list parm){ ciało funkcji } Funkcja może zwrócić dane dowolnego typu z wyjątkiem tablic. Pustą listę parametrów specyfikujemy słowem kluczowym void. (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
26 Funkcje Funkcje to podstawowe części składowe każdego programu w języku C. Ogólna postać definicji funkcji to: typ zwracany nazwa funkcji (list parm){ ciało funkcji } Funkcja może zwrócić dane dowolnego typu z wyjątkiem tablic. Pustą listę parametrów specyfikujemy słowem kluczowym void. Prototyp funkcji - deklaracja funkcji: void f (int i, int j, float k); void f (int i, j, float k); BŁĄD (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
27 Funkcje Żadna funkcja nie może odwołać się bezpośrednio do kodu innej funkcji inaczej niż przez jej wywołanie. (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
28 Funkcje Żadna funkcja nie może odwołać się bezpośrednio do kodu innej funkcji inaczej niż przez jej wywołanie. Nie można użyć instrukcji goto aby wskoczyć do środka innej funkcji. (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
29 Funkcje Żadna funkcja nie może odwołać się bezpośrednio do kodu innej funkcji inaczej niż przez jej wywołanie. Nie można użyć instrukcji goto aby wskoczyć do środka innej funkcji. Zmienne zdefiniowane wewnątrz funkcji oraz parametry formalne to zmienne lokalne. (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
30 Funkcje Żadna funkcja nie może odwołać się bezpośrednio do kodu innej funkcji inaczej niż przez jej wywołanie. Nie można użyć instrukcji goto aby wskoczyć do środka innej funkcji. Zmienne zdefiniowane wewnątrz funkcji oraz parametry formalne to zmienne lokalne. Niestatyczne zmienne lokalne nie mogą zachowywać wartości pomiędzy wywołaniami funkcji. (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
31 Funkcje Żadna funkcja nie może odwołać się bezpośrednio do kodu innej funkcji inaczej niż przez jej wywołanie. Nie można użyć instrukcji goto aby wskoczyć do środka innej funkcji. Zmienne zdefiniowane wewnątrz funkcji oraz parametry formalne to zmienne lokalne. Niestatyczne zmienne lokalne nie mogą zachowywać wartości pomiędzy wywołaniami funkcji. Funkcje mają zasięg pliku. (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
32 Funkcje - zwracanie wartości Wszystkie funkcje, z wyjątkiem zadeklarowanych jako void, zwracają jedną wartość, określoną instrukcją return zgodną z typem funkcji. (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
33 Funkcje - zwracanie wartości Wszystkie funkcje, z wyjątkiem zadeklarowanych jako void, zwracają jedną wartość, określoną instrukcją return zgodną z typem funkcji. Funkcje można podzielić na trzy rodzaje: (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
34 Funkcje - zwracanie wartości Wszystkie funkcje, z wyjątkiem zadeklarowanych jako void, zwracają jedną wartość, określoną instrukcją return zgodną z typem funkcji. Funkcje można podzielić na trzy rodzaje: obliczeniowe - sqrt(), sin(). (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
35 Funkcje - zwracanie wartości Wszystkie funkcje, z wyjątkiem zadeklarowanych jako void, zwracają jedną wartość, określoną instrukcją return zgodną z typem funkcji. Funkcje można podzielić na trzy rodzaje: obliczeniowe - sqrt(), sin(). operujące na informacjach i zwracające wartość w zależności od wyniku operacji malloc() //NULL lub adres przydzielonego obszaru pamięci. fclose() //0 powodzenie, EOF - błąd. (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
36 Funkcje - zwracanie wartości Wszystkie funkcje, z wyjątkiem zadeklarowanych jako void, zwracają jedną wartość, określoną instrukcją return zgodną z typem funkcji. Funkcje można podzielić na trzy rodzaje: obliczeniowe - sqrt(), sin(). operujące na informacjach i zwracające wartość w zależności od wyniku operacji malloc() //NULL lub adres przydzielonego obszaru pamięci. fclose() //0 powodzenie, EOF - błąd. funkcje typu void - (procedury): exit(), free(). (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
37 Funkcje - zwracanie wartości Wszystkie funkcje, z wyjątkiem zadeklarowanych jako void, zwracają jedną wartość, określoną instrukcją return zgodną z typem funkcji. Funkcje można podzielić na trzy rodzaje: obliczeniowe - sqrt(), sin(). operujące na informacjach i zwracające wartość w zależności od wyniku operacji malloc() //NULL lub adres przydzielonego obszaru pamięci. fclose() //0 powodzenie, EOF - błąd. funkcje typu void - (procedury): exit(), free(). zmienna = fun(); // przypisujemy zmiennej wynik, który zawraca funkcja. (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
38 Funkcje - zwracanie wartości Wszystkie funkcje, z wyjątkiem zadeklarowanych jako void, zwracają jedną wartość, określoną instrukcją return zgodną z typem funkcji. Funkcje można podzielić na trzy rodzaje: obliczeniowe - sqrt(), sin(). operujące na informacjach i zwracające wartość w zależności od wyniku operacji malloc() //NULL lub adres przydzielonego obszaru pamięci. fclose() //0 powodzenie, EOF - błąd. funkcje typu void - (procedury): exit(), free(). zmienna = fun(); // przypisujemy zmiennej wynik, który zawraca funkcja. Funkcja int printf(const char * format [, arg,...]) zwraca liczbę wypisanych znaków. Wartości zwracane przez funkcję mogą być ignorowane. (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
39 Instrukcje skoku - return Ogólna postać instrukcji return to: (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
40 Instrukcje skoku - return Ogólna postać instrukcji return to: return wyrażenie; (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
41 Instrukcje skoku - return Ogólna postać instrukcji return to: return wyrażenie; wyrażenie występuje tylko wtedy, gdy z deklaracji funkcji wynika, że ma zostać zwrócona wartość. (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
42 Instrukcje skoku - return Ogólna postać instrukcji return to: return wyrażenie; wyrażenie występuje tylko wtedy, gdy z deklaracji funkcji wynika, że ma zostać zwrócona wartość. Instrukcja return z określoną wartością może wystąpić jedynie w funkcji, która nie jest typu void. (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
43 Instrukcje skoku - return Ogólna postać instrukcji return to: return wyrażenie; wyrażenie występuje tylko wtedy, gdy z deklaracji funkcji wynika, że ma zostać zwrócona wartość. Instrukcja return z określoną wartością może wystąpić jedynie w funkcji, która nie jest typu void. Instrukcji return używa się aby powrócić z funkcji. Instrukcja powoduje przekazanie sterowania do punktu, w którym miało miejsce wywołanie funkcji. (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
44 Instrukcje skoku - return Ogólna postać instrukcji return to: return wyrażenie; wyrażenie występuje tylko wtedy, gdy z deklaracji funkcji wynika, że ma zostać zwrócona wartość. Instrukcja return z określoną wartością może wystąpić jedynie w funkcji, która nie jest typu void. Instrukcji return używa się aby powrócić z funkcji. Instrukcja powoduje przekazanie sterowania do punktu, w którym miało miejsce wywołanie funkcji. W C99 (C++) instrukcja return w funkcji niebędącej typu void musi zwrócić wartość. (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
45 Instrukcje skoku - return Ogólna postać instrukcji return to: return wyrażenie; wyrażenie występuje tylko wtedy, gdy z deklaracji funkcji wynika, że ma zostać zwrócona wartość. Instrukcja return z określoną wartością może wystąpić jedynie w funkcji, która nie jest typu void. Instrukcji return używa się aby powrócić z funkcji. Instrukcja powoduje przekazanie sterowania do punktu, w którym miało miejsce wywołanie funkcji. W C99 (C++) instrukcja return w funkcji niebędącej typu void musi zwrócić wartość. W C89 jeśli funkcja z definicji zwraca wartość, to w dobrym stylu jest zadbanie, aby jakaś wartość została zwrócona. Jeśli nie określi się wartości funkcja zwróci śmieci. (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
46 Funkcje - przekazywanie argumentów W różnych językach programowania argumenty do funkcji mogą być przekazywane: (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
47 Funkcje - przekazywanie argumentów W różnych językach programowania argumenty do funkcji mogą być przekazywane: przez wartość, (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
48 Funkcje - przekazywanie argumentów W różnych językach programowania argumenty do funkcji mogą być przekazywane: przez wartość, przez referencję. (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
49 Funkcje - przekazywanie argumentów W różnych językach programowania argumenty do funkcji mogą być przekazywane: przez wartość, przez referencję. Argumenty przekazane przez wartość są kopiowane do parametrów formalnych. Zmiany wartości parametrów formalnych nie mają wpływu na wartości argumentów. (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
50 Funkcje - przekazywanie argumentów W różnych językach programowania argumenty do funkcji mogą być przekazywane: przez wartość, przez referencję. Argumenty przekazane przez wartość są kopiowane do parametrów formalnych. Zmiany wartości parametrów formalnych nie mają wpływu na wartości argumentów. W przypadku przekazania przez referencje, adres argumentu jest kopiowany do parametru formalnego. Wewnątrz funkcji odwołanie do faktycznej wartości realizowane jest za pomocą adresu. (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
51 Funkcje - przekazywanie argumentów W różnych językach programowania argumenty do funkcji mogą być przekazywane: przez wartość, przez referencję. Argumenty przekazane przez wartość są kopiowane do parametrów formalnych. Zmiany wartości parametrów formalnych nie mają wpływu na wartości argumentów. W przypadku przekazania przez referencje, adres argumentu jest kopiowany do parametru formalnego. Wewnątrz funkcji odwołanie do faktycznej wartości realizowane jest za pomocą adresu. W języku C argumenty przekazywane są przez wartość. (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
52 Funkcje - przekazywanie argumentów W różnych językach programowania argumenty do funkcji mogą być przekazywane: przez wartość, przez referencję. Argumenty przekazane przez wartość są kopiowane do parametrów formalnych. Zmiany wartości parametrów formalnych nie mają wpływu na wartości argumentów. W przypadku przekazania przez referencje, adres argumentu jest kopiowany do parametru formalnego. Wewnątrz funkcji odwołanie do faktycznej wartości realizowane jest za pomocą adresu. W języku C argumenty przekazywane są przez wartość. W języku C możemy symulować przekazywanie przez referencję, przekazując przez wartość wskaźnik do zmiennej, zamiast samej zmiennej. (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
53 Funkcje - przekazywanie argumentów W języku C argumenty przekazywane są przez wartość. (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
54 Funkcje - przekazywanie argumentów W języku C argumenty przekazywane są przez wartość. Przykład: int sq(int t){ t*=t; printf ("in sq t = %d\n",t); return t; } int main ( void ){ int t =10; printf ("%d * %d = %d\n", t, t, return 0; } sq(t)); (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
55 Funkcje rekurencyjne W języku C funkcja może wywołać samą siebie. W takim przypadku na stosie powstaje nowy zestaw zmiennych lokalnych, a wykonanie kodu zaczyna się od początku z nowym zestawem wartości. (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
56 Funkcje rekurencyjne W języku C funkcja może wywołać samą siebie. W takim przypadku na stosie powstaje nowy zestaw zmiennych lokalnych, a wykonanie kodu zaczyna się od początku z nowym zestawem wartości. Wywołanie rekurencyjne nie tworzy kopii funkcji. Nowe są jedynie wartości, na których działa kod. (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
57 Funkcje rekurencyjne W języku C funkcja może wywołać samą siebie. W takim przypadku na stosie powstaje nowy zestaw zmiennych lokalnych, a wykonanie kodu zaczyna się od początku z nowym zestawem wartości. Wywołanie rekurencyjne nie tworzy kopii funkcji. Nowe są jedynie wartości, na których działa kod. Funkcje rekurencyjne przeważnie działają wolniej niż odpowiedniki iteracyjne. (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
58 Funkcje rekurencyjne W języku C funkcja może wywołać samą siebie. W takim przypadku na stosie powstaje nowy zestaw zmiennych lokalnych, a wykonanie kodu zaczyna się od początku z nowym zestawem wartości. Wywołanie rekurencyjne nie tworzy kopii funkcji. Nowe są jedynie wartości, na których działa kod. Funkcje rekurencyjne przeważnie działają wolniej niż odpowiedniki iteracyjne. Rekurencja umożliwia prosty i jasny zapis niektórych algorytmów. (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
59 Funkcje rekurencyjne W języku C funkcja może wywołać samą siebie. W takim przypadku na stosie powstaje nowy zestaw zmiennych lokalnych, a wykonanie kodu zaczyna się od początku z nowym zestawem wartości. Wywołanie rekurencyjne nie tworzy kopii funkcji. Nowe są jedynie wartości, na których działa kod. Funkcje rekurencyjne przeważnie działają wolniej niż odpowiedniki iteracyjne. Rekurencja umożliwia prosty i jasny zapis niektórych algorytmów. Bardzo głęboka rekurencja może spowodować przepełnienie stosu. (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
60 Funkcje rekurencyjne - przykład - wieże Hanoi void hanoi ( int n, int s, int d, int p){ if(n >0) { hanoi (n -1,s,p,d); printf (" przesunac krazek z %d na %d\n",s,d); hanoi (n -1,p,d,s); } } int main ( void ){ printf ("5\n"); hanoi (5, 1, 3, 2); return 0; } (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
61 Wskaźniki Korzyści płynące ze wskaźników: (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
62 Wskaźniki Korzyści płynące ze wskaźników: wskaźniki umożliwiają funkcjom modyfikowanie swoich argumentów, (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
63 Wskaźniki Korzyści płynące ze wskaźników: wskaźniki umożliwiają funkcjom modyfikowanie swoich argumentów, wskaźniki są podstawą dynamicznej alokacji pamięci, (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
64 Wskaźniki Korzyści płynące ze wskaźników: wskaźniki umożliwiają funkcjom modyfikowanie swoich argumentów, wskaźniki są podstawą dynamicznej alokacji pamięci, wskaźniki umożliwiają realizację dynamicznych struktur danych: listy, drzewa, itp, (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
65 Wskaźniki Korzyści płynące ze wskaźników: wskaźniki umożliwiają funkcjom modyfikowanie swoich argumentów, wskaźniki są podstawą dynamicznej alokacji pamięci, wskaźniki umożliwiają realizację dynamicznych struktur danych: listy, drzewa, itp, wskaźniki pozwalają poprawić efektywność działania wielu procedur. (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
66 Wskaźniki Wskaźnik to zmienna przechowująca adres innej zmiennej. (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
67 Wskaźniki Wskaźnik to zmienna przechowująca adres innej zmiennej. Adres zmiennej to informacja o jej fizycznej lokalizacji w pamięci programu. (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
68 Wskaźniki Wskaźnik to zmienna przechowująca adres innej zmiennej. Adres zmiennej to informacja o jej fizycznej lokalizacji w pamięci programu. Ogólna postać deklaracji wskaźnika: typ *nazwa; (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
69 Wskaźniki Wskaźnik to zmienna przechowująca adres innej zmiennej. Adres zmiennej to informacja o jej fizycznej lokalizacji w pamięci programu. Ogólna postać deklaracji wskaźnika: typ *nazwa; Typ podstawowy wskaźnika określa, na jakiego typu zmienne może on wskazywać. (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
70 Wskaźniki Wskaźnik to zmienna przechowująca adres innej zmiennej. Adres zmiennej to informacja o jej fizycznej lokalizacji w pamięci programu. Ogólna postać deklaracji wskaźnika: typ *nazwa; Typ podstawowy wskaźnika określa, na jakiego typu zmienne może on wskazywać. Wszelkie obliczenia na wskaźnikach wykonuje się z uwzględnieniem typu podstawowego. (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
71 Wskaźniki Wskaźnik to zmienna przechowująca adres innej zmiennej. Adres zmiennej to informacja o jej fizycznej lokalizacji w pamięci programu. Ogólna postać deklaracji wskaźnika: typ *nazwa; Typ podstawowy wskaźnika określa, na jakiego typu zmienne może on wskazywać. Wszelkie obliczenia na wskaźnikach wykonuje się z uwzględnieniem typu podstawowego. W przypadku deklaracji typu int*, kompilator zakłada, że dowolny adres wskazywany przez niego zawiera liczbę całkowitą - niezależnie od tego, co aktualnie zawiera wskazywany fragment pamięci. (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
72 Wskaźniki Wskaźnik to zmienna przechowująca adres innej zmiennej. Adres zmiennej to informacja o jej fizycznej lokalizacji w pamięci programu. Ogólna postać deklaracji wskaźnika: typ *nazwa; Typ podstawowy wskaźnika określa, na jakiego typu zmienne może on wskazywać. Wszelkie obliczenia na wskaźnikach wykonuje się z uwzględnieniem typu podstawowego. W przypadku deklaracji typu int*, kompilator zakłada, że dowolny adres wskazywany przez niego zawiera liczbę całkowitą - niezależnie od tego, co aktualnie zawiera wskazywany fragment pamięci. Programista musi zagwarantować, że typ wskaźnika jest zgodny z typem zmiennej, na który wskazuje. (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
73 Wskaźniki - inicjalizacja Wskaźnikowi, który nie zawiera poprawnego adresu należy nadać wartość NULL(zero). (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
74 Wskaźniki - inicjalizacja Wskaźnikowi, który nie zawiera poprawnego adresu należy nadać wartość NULL(zero). Język C gwarantuje, że pod zerowym adresem nie istnieje żadna zmienna. (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
75 Wskaźniki - inicjalizacja Wskaźnikowi, który nie zawiera poprawnego adresu należy nadać wartość NULL(zero). Język C gwarantuje, że pod zerowym adresem nie istnieje żadna zmienna. Wskaźnik o wartości NULL nie wskazuje na żadną zmienną. (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
76 Wskaźniki - inicjalizacja Wskaźnikowi, który nie zawiera poprawnego adresu należy nadać wartość NULL(zero). Język C gwarantuje, że pod zerowym adresem nie istnieje żadna zmienna. Wskaźnik o wartości NULL nie wskazuje na żadną zmienną. Przykład: int *pi; float *pf, fl; pi = NULL ; pf = &fl; * pi = 81; // BLEDNA INSTRUKCJA *pf = 12.89; (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
77 Wskaźniki - operatory Operator & zwraca adres w pamięci dla operandu. (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
78 Wskaźniki - operatory Operator & zwraca adres w pamięci dla operandu. Operator * zwraca wartość zmiennej, znajdującej się pod adresem operandu. (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
79 Wskaźniki - operatory Operator & zwraca adres w pamięci dla operandu. Operator * zwraca wartość zmiennej, znajdującej się pod adresem operandu. Każda lokalizacja w pamięci jest identyfikowana przez unikalny adres. (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
80 Wskaźniki - operatory Operator & zwraca adres w pamięci dla operandu. Operator * zwraca wartość zmiennej, znajdującej się pod adresem operandu. Każda lokalizacja w pamięci jest identyfikowana przez unikalny adres. Każda lokalizacja w pamięci zawiera wartość. (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
81 Wskaźniki - operatory Operator & zwraca adres w pamięci dla operandu. Operator * zwraca wartość zmiennej, znajdującej się pod adresem operandu. Każda lokalizacja w pamięci jest identyfikowana przez unikalny adres. Każda lokalizacja w pamięci zawiera wartość. Przykład: int i, *pi, *pj; i =9; pi = &i; pj = pi; *pj =123; Jaka jest wartość i, &i, pi, *pi, &pi? (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
82 Wskaźniki Wskaźnik typu void * to wskaźnik ogólnego przeznaczenia. (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
83 Wskaźniki Wskaźnik typu void * to wskaźnik ogólnego przeznaczenia. Wskaźnik typu void * można przypisać dowolnemu innemu wskaźnikowi. (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
84 Wskaźniki Wskaźnik typu void * to wskaźnik ogólnego przeznaczenia. Wskaźnik typu void * można przypisać dowolnemu innemu wskaźnikowi. Wskaźnikowi typu void * można przypisać dowolny inny wskaźnik. (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
85 Wskaźniki Wskaźnik typu void * to wskaźnik ogólnego przeznaczenia. Wskaźnik typu void * można przypisać dowolnemu innemu wskaźnikowi. Wskaźnikowi typu void * można przypisać dowolny inny wskaźnik. void * pozwala zdefiniować parametr funkcji, która może przyjąć jako argument wskaźnik dowolnego typu. (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
86 Wskaźniki Wskaźnik typu void * to wskaźnik ogólnego przeznaczenia. Wskaźnik typu void * można przypisać dowolnemu innemu wskaźnikowi. Wskaźnikowi typu void * można przypisać dowolny inny wskaźnik. void * pozwala zdefiniować parametr funkcji, która może przyjąć jako argument wskaźnik dowolnego typu. void * umożliwia dostęp pamięci (np. malloc), gdy przeznaczenie takiej pamięci nie jest jeszcze znane. (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
87 Wskaźniki Wskaźnik typu void * to wskaźnik ogólnego przeznaczenia. Wskaźnik typu void * można przypisać dowolnemu innemu wskaźnikowi. Wskaźnikowi typu void * można przypisać dowolny inny wskaźnik. void * pozwala zdefiniować parametr funkcji, która może przyjąć jako argument wskaźnik dowolnego typu. void * umożliwia dostęp pamięci (np. malloc), gdy przeznaczenie takiej pamięci nie jest jeszcze znane. Nie można wykonywać operacji arytmetycznych na wskaźnikach typu void *. (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
88 Arytmetyka wskaźników Operacje wskaźnikowe wykonywane są z uwzględnieniem typu podstawowego wskaźnika. (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
89 Arytmetyka wskaźników Operacje wskaźnikowe wykonywane są z uwzględnieniem typu podstawowego wskaźnika. Na wskaźnikach można wykonywać tylko dwie operacje arytmetyczne: dodawanie i odejmowanie. (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
90 Arytmetyka wskaźników Operacje wskaźnikowe wykonywane są z uwzględnieniem typu podstawowego wskaźnika. Na wskaźnikach można wykonywać tylko dwie operacje arytmetyczne: dodawanie i odejmowanie. Przykład: int tab [10]={1}; int *pt=null, * ptf = NULL ; pt = tab ;// pt = & tab [0]; ptf = pt + 5; // ptf = & pt; - BLAD - niezgodnosc typow *( pt + 3) = *pt + 3; *( pt + 4) = *( ptf - 2); *( pt + 1) = ptf - tab ; (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
91 Arytmetyka wskaźników # define SIZE 8... int i, itab [ SIZE ], * pit = itab ; double dtab [ SIZE ], * pdt = dtab ; printf (" %18 s %15 s\n", " int ", " double "); for ( i = 0; i < SIZE ; i ++) printf (" wsk + %d %10 p %10 p\n",i,pit +i,pdt +i); (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
92 Arytmetyka wskaźników # define SIZE 8... int i, itab [ SIZE ], * pit = itab ; double dtab [ SIZE ], * pdt = dtab ; printf (" %18 s %15 s\n", " int ", " double "); for ( i = 0; i < SIZE ; i ++) printf (" wsk + %d %10 p %10 p\n",i,pit +i,pdt +i); int double wsk + 0 : 0x7fff36430c60 0x7fff36430c10 wsk + 1 : 0x7fff36430c64 0x7fff36430c18 wsk + 2 : 0x7fff36430c68 0x7fff36430c20 wsk + 3 : 0x7fff36430c6c 0x7fff36430c28 wsk + 4 : 0x7fff36430c70 0x7fff36430c30 wsk + 5 : 0x7fff36430c74 0x7fff36430c38 wsk + 6 : 0x7fff36430c78 0x7fff36430c40 wsk (Wykład + 74) : 0x7fff36430c7c Tablice, funkcje, wskaźniki 0x7fff36430c48 - wprowadzenie 19 listopada / 37
93 Wskaźniki i tablice Pomiędzy wskaźnikami i tablicami istnieje ścisłe powiązanie. Nazwa tablicy bez indeksu to adres pierwszego elementu. (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
94 Wskaźniki i tablice Pomiędzy wskaźnikami i tablicami istnieje ścisłe powiązanie. Nazwa tablicy bez indeksu to adres pierwszego elementu. Przykład: int tab [10]; int *p; p= tab ; (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
95 Wskaźniki i tablice Pomiędzy wskaźnikami i tablicami istnieje ścisłe powiązanie. Nazwa tablicy bez indeksu to adres pierwszego elementu. Przykład: int tab [10]; int *p; p= tab ; Aby odwołać się do elementu o indeksie 4 w tablicy tab można skorzystać z: tab[4] lub *(p+4). (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
96 Wskaźniki i tablice Pomiędzy wskaźnikami i tablicami istnieje ścisłe powiązanie. Nazwa tablicy bez indeksu to adres pierwszego elementu. Przykład: int tab [10]; int *p; p= tab ; Aby odwołać się do elementu o indeksie 4 w tablicy tab można skorzystać z: tab[4] lub *(p+4). Polecenie tab[4]=18 jest równoważne *(p+4)=18, jak również *(tab+4)=18 oraz p[4]=18. (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
97 Czym są tablice? W języku C dla tablic przewidziano tylko 2 operacje: (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
98 Czym są tablice? W języku C dla tablic przewidziano tylko 2 operacje: określenie rozmiaru tablicy, (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
99 Czym są tablice? W języku C dla tablic przewidziano tylko 2 operacje: określenie rozmiaru tablicy, uzyskanie adresu pierwszego elementu tablicy (o indeksie zerowym). (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
100 Czym są tablice? W języku C dla tablic przewidziano tylko 2 operacje: określenie rozmiaru tablicy, uzyskanie adresu pierwszego elementu tablicy (o indeksie zerowym). Wszystkie pozostałe operacje są w istocie realizowane na wskaźnikach, nawet jeśli zapis sugeruje co innego, np. tab[i]. (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
101 Czym są tablice? W języku C dla tablic przewidziano tylko 2 operacje: określenie rozmiaru tablicy, uzyskanie adresu pierwszego elementu tablicy (o indeksie zerowym). Wszystkie pozostałe operacje są w istocie realizowane na wskaźnikach, nawet jeśli zapis sugeruje co innego, np. tab[i]. W języku C nazwa tab odnosi się do adresu elementu tablicy tab[] o indeksie zero w każdym kontekście, z wyjątkiem jednego, kiedy to występuje jako argument operatora sizeof. (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
102 Czym są tablice? W języku C dla tablic przewidziano tylko 2 operacje: określenie rozmiaru tablicy, uzyskanie adresu pierwszego elementu tablicy (o indeksie zerowym). Wszystkie pozostałe operacje są w istocie realizowane na wskaźnikach, nawet jeśli zapis sugeruje co innego, np. tab[i]. W języku C nazwa tab odnosi się do adresu elementu tablicy tab[] o indeksie zero w każdym kontekście, z wyjątkiem jednego, kiedy to występuje jako argument operatora sizeof. Zapis sizeof tab - reprezentuje rozmiar całej tablicy, a nie rozmiar wskaźnika jednego z jej elementów. (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
103 Czym są tablice? *tab = 18 - przypisujemy wartość elementowi o indeksie 0. (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
104 Czym są tablice? *tab = 18 - przypisujemy wartość elementowi o indeksie 0. *(tab + 5) = 18 - przypisujemy wartość elementowi o indeksie 5. (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
105 Czym są tablice? *tab = 18 - przypisujemy wartość elementowi o indeksie 0. *(tab + 5) = 18 - przypisujemy wartość elementowi o indeksie 5. *(tab + 5) = 18 - działa tak samo jak *(5 + tab) = 18. (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
106 Czym są tablice? *tab = 18 - przypisujemy wartość elementowi o indeksie 0. *(tab + 5) = 18 - przypisujemy wartość elementowi o indeksie 5. *(tab + 5) = 18 - działa tak samo jak *(5 + tab) = 18. tab[5] = 18 - przypisujemy wartość elementowi o indeksie 5. (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
107 Czym są tablice? *tab = 18 - przypisujemy wartość elementowi o indeksie 0. *(tab + 5) = 18 - przypisujemy wartość elementowi o indeksie 5. *(tab + 5) = 18 - działa tak samo jak *(5 + tab) = 18. tab[5] = 18 - przypisujemy wartość elementowi o indeksie 5. tab[5] = 18 - działa tak samo jak 5[tab]=18. (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
108 Czym są tablice? *tab = 18 - przypisujemy wartość elementowi o indeksie 0. *(tab + 5) = 18 - przypisujemy wartość elementowi o indeksie 5. *(tab + 5) = 18 - działa tak samo jak *(5 + tab) = 18. tab[5] = 18 - przypisujemy wartość elementowi o indeksie 5. tab[5] = 18 - działa tak samo jak 5[tab]=18. Notacja 5[tab] = 18 - działa, ale nie powinna być stosowana. (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
109 Tablice i wskaźniki Tablice to nie wskaźniki choć są blisko z nimi związane. (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
110 Tablice i wskaźniki Tablice to nie wskaźniki choć są blisko z nimi związane. char tab[] i char *p to to samo tylko w przypadku parametrów formalnych funkcji. (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
111 Tablice i wskaźniki Tablice to nie wskaźniki choć są blisko z nimi związane. char tab[] i char *p to to samo tylko w przypadku parametrów formalnych funkcji. Deklaracja char tab[6] przydziela miejsce na 6 znaków i wiąże ten obszar z nazwą tab. (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
112 Tablice i wskaźniki Tablice to nie wskaźniki choć są blisko z nimi związane. char tab[] i char *p to to samo tylko w przypadku parametrów formalnych funkcji. Deklaracja char tab[6] przydziela miejsce na 6 znaków i wiąże ten obszar z nazwą tab. Deklaracja char *p przydziela miejsce na 1 wskaźnik. Wskaźnik może wskazywać: (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
113 Tablice i wskaźniki Tablice to nie wskaźniki choć są blisko z nimi związane. char tab[] i char *p to to samo tylko w przypadku parametrów formalnych funkcji. Deklaracja char tab[6] przydziela miejsce na 6 znaków i wiąże ten obszar z nazwą tab. Deklaracja char *p przydziela miejsce na 1 wskaźnik. Wskaźnik może wskazywać: na pojedynczą zmienną typu char, (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
114 Tablice i wskaźniki Tablice to nie wskaźniki choć są blisko z nimi związane. char tab[] i char *p to to samo tylko w przypadku parametrów formalnych funkcji. Deklaracja char tab[6] przydziela miejsce na 6 znaków i wiąże ten obszar z nazwą tab. Deklaracja char *p przydziela miejsce na 1 wskaźnik. Wskaźnik może wskazywać: na pojedynczą zmienną typu char, na dowolny indeks w tablicy typu char, (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
115 Tablice i wskaźniki Tablice to nie wskaźniki choć są blisko z nimi związane. char tab[] i char *p to to samo tylko w przypadku parametrów formalnych funkcji. Deklaracja char tab[6] przydziela miejsce na 6 znaków i wiąże ten obszar z nazwą tab. Deklaracja char *p przydziela miejsce na 1 wskaźnik. Wskaźnik może wskazywać: na pojedynczą zmienną typu char, na dowolny indeks w tablicy typu char, nigdzie - wskaźnik pusty. (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
116 Tablice i wskaźniki Przykład: char tab[]= hello ; char *p = world ; (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
117 Tablice i wskaźniki Przykład: char tab[]= hello ; char *p = world ; Jak przetłumaczyć x[3]??? (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
118 Tablice i wskaźniki Przykład: char tab[]= hello ; char *p = world ; Jak przetłumaczyć x[3]??? tab[3] - weź adres tablicy tab dodaj do niego 3 i pobierz znak, (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
119 Tablice i wskaźniki Przykład: char tab[]= hello ; char *p = world ; Jak przetłumaczyć x[3]??? tab[3] - weź adres tablicy tab dodaj do niego 3 i pobierz znak, p[3] - weź wartość wskaźnika p, dodaj do niej 3 i pobierz znak. (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
120 Tablice i wskaźniki Przykład: char tab[]= hello ; char *p = world ; Jak przetłumaczyć x[3]??? tab[3] - weź adres tablicy tab dodaj do niego 3 i pobierz znak, p[3] - weź wartość wskaźnika p, dodaj do niej 3 i pobierz znak. Gdzie znajduje się x[3]??? (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
121 Tablice i wskaźniki Przykład: char tab[]= hello ; char *p = world ; Jak przetłumaczyć x[3]??? tab[3] - weź adres tablicy tab dodaj do niego 3 i pobierz znak, p[3] - weź wartość wskaźnika p, dodaj do niej 3 i pobierz znak. Gdzie znajduje się x[3]??? tab[3] - znak odległy o 3 miejsca od początku obiektu o nazwie tab, (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
122 Tablice i wskaźniki Przykład: char tab[]= hello ; char *p = world ; Jak przetłumaczyć x[3]??? tab[3] - weź adres tablicy tab dodaj do niego 3 i pobierz znak, p[3] - weź wartość wskaźnika p, dodaj do niej 3 i pobierz znak. Gdzie znajduje się x[3]??? tab[3] - znak odległy o 3 miejsca od początku obiektu o nazwie tab, p[3] - znak odległy o 3 miejsca od obiektu wskazywanego przez p. (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
123 Arytmetyka wskaźników Co inkrementuje *ptr++? (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
124 Arytmetyka wskaźników Co inkrementuje *ptr++? Operatory *, ++ mają łączność prawostronną. (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
125 Arytmetyka wskaźników Co inkrementuje *ptr++? Operatory *, ++ mają łączność prawostronną. Konstrukcja *ptr++ inkrementuje ptr (i zwraca wartość wskazywaną przez pierwotną wartość wskaźnika). (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
126 Arytmetyka wskaźników Co inkrementuje *ptr++? Operatory *, ++ mają łączność prawostronną. Konstrukcja *ptr++ inkrementuje ptr (i zwraca wartość wskazywaną przez pierwotną wartość wskaźnika). Aby zwiększyć o jeden obiekt wskazywany przez ptr, należy użyć (*ptr)++. (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
127 Arytmetyka wskaźników Co inkrementuje *ptr++? Operatory *, ++ mają łączność prawostronną. Konstrukcja *ptr++ inkrementuje ptr (i zwraca wartość wskazywaną przez pierwotną wartość wskaźnika). Aby zwiększyć o jeden obiekt wskazywany przez ptr, należy użyć (*ptr)++. wyrażenie wartość wyrażenia inkrementacja *p++ lub *(p++) *p przed ++ p (*p)++ *p przed ++ *p *++p lub *(++p) *p po ++ p ++*p lub ++(*p) *p po ++ *p (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
128 Wskaźniki - typowe błędy Przykład: int main ( void ){ int x, *p; x = 10; * p = x; // blad p nie zostal zainicjowany. return 0; } (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
129 Wskaźniki - typowe błędy Przykład: int main ( void ){ int x, *p; x = 10; * p = x; // blad p nie zostal zainicjowany. return 0; } Program umieści wartość 10 w nieznanym obszarze pamięci, ponieważ wskaźnik p nigdy nie otrzymał wartości i nie wiadomo na co wskazuje. (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
130 Wskaźniki - typowe błędy Błąd Naruszenie ochrony pamięci (segmentation fault (sygnał SIGSEGV)) wskazuje, że wystąpiła próba dostępu do adresu spoza pamięci przydzielonej dla programu. (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
131 Wskaźniki - typowe błędy Błąd Naruszenie ochrony pamięci (segmentation fault (sygnał SIGSEGV)) wskazuje, że wystąpiła próba dostępu do adresu spoza pamięci przydzielonej dla programu. Przykład: int * ptr = NULL ; * ptr = 1; const char *s = " hello world "; // error : assignment of read - only location * s *s = H ; (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
132 Wskaźniki - typowe błędy Przykład: int main ( void ){ int x, *p; x = 10; p = x; // bledne przypisanie powinno byc p =& x printf ("%d", *p); } return 0; (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
133 Problemy ze wskaźnikami Błędny wskaźnik trudno znaleźć, gdyż wskaźnik sam w sobie nie jest problemem. (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
134 Problemy ze wskaźnikami Błędny wskaźnik trudno znaleźć, gdyż wskaźnik sam w sobie nie jest problemem. Problem bierze się stad, że używając niepoprawnego wskaźnika, zapisujemy lub odczytujemy dane z nieznanego obszaru pamięci. (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
135 Problemy ze wskaźnikami Błędny wskaźnik trudno znaleźć, gdyż wskaźnik sam w sobie nie jest problemem. Problem bierze się stad, że używając niepoprawnego wskaźnika, zapisujemy lub odczytujemy dane z nieznanego obszaru pamięci. Odczytując dane, dostajemy śmieci. (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
136 Problemy ze wskaźnikami Błędny wskaźnik trudno znaleźć, gdyż wskaźnik sam w sobie nie jest problemem. Problem bierze się stad, że używając niepoprawnego wskaźnika, zapisujemy lub odczytujemy dane z nieznanego obszaru pamięci. Odczytując dane, dostajemy śmieci. Zapisując dane, możemy zamazać kod programu lub dane. (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
137 Funkcje - przekazywanie przez referencję W języku C możemy symulować przekazywanie przez referencję, przekazując przez wartość wskaźnik (adres do zmiennej), zamiast samej zmiennej. (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
138 Funkcje - przekazywanie przez referencję W języku C możemy symulować przekazywanie przez referencję, przekazując przez wartość wskaźnik (adres do zmiennej), zamiast samej zmiennej. Przykład: void swap ( int *x, int *y){ int temp = *x; *x = *y; *y = temp ; } int main ( void ){ int i=20, j =29; swap (&i, &j); } return 0; (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
139 Funkcje - przekazywanie tablic W języku C nie można (i nie trzeba) przekazać do funkcji całej tablicy. (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
140 Funkcje - przekazywanie tablic W języku C nie można (i nie trzeba) przekazać do funkcji całej tablicy. Do funkcji można przekazać tylko i wyłącznie adres do pierwszego elementu tablicy, podając nazwę tablicy bez indeksu. (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
141 Funkcje - przekazywanie tablic W języku C nie można (i nie trzeba) przekazać do funkcji całej tablicy. Do funkcji można przekazać tylko i wyłącznie adres do pierwszego elementu tablicy, podając nazwę tablicy bez indeksu. Przykład: int main ( void ){ int tab [10]; func ( tab ); return 0; } (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
142 Funkcje - przekazywanie tablic W języku C nie można (i nie trzeba) przekazać do funkcji całej tablicy. Do funkcji można przekazać tylko i wyłącznie adres do pierwszego elementu tablicy, podając nazwę tablicy bez indeksu. Przykład: int main ( void ){ int tab [10]; func ( tab ); return 0; } 3 sposoby deklaracji funkcji func(): void func ( int *x); void func ( int x [10]) ; void func ( int x []) ; (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
143 Funkcje - przekazywanie tablic W języku C nie można (i nie trzeba) przekazać do funkcji całej tablicy. Do funkcji można przekazać tylko i wyłącznie adres do pierwszego elementu tablicy, podając nazwę tablicy bez indeksu. Przykład: int main ( void ){ int tab [10]; func ( tab ); return 0; } 3 sposoby deklaracji funkcji func(): void func ( int *x); void func ( int x [10]) ; void func ( int x []) ; Wewnątrz funkcji func() wyrażenie sizeof x zwraca rozmiar wskaźnika, nie tablicy. (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
144 Funkcje - przekazywanie tablic W języku C nie można (i nie trzeba) przekazać do funkcji całej tablicy. Do funkcji można przekazać tylko i wyłącznie adres do pierwszego elementu tablicy, podając nazwę tablicy bez indeksu. Przykład: int main ( void ){ int tab [10]; func ( tab ); return 0; } Wewnątrz funkcji func() wyrażenie sizeof x zwraca rozmiar wskaźnika, nie tablicy. Rozmiar tablicy musimy przekazać jawnie: void func ( int *x, int roz ); void func ( int x [10], int roz ); void func ( int x[], int roz ); (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
145 Funkcje - przekazywanie tablic Przykład: # define SIZE 10 int sump ( int * start, int * end ) { int total = 0; while ( start < end ) total += * start ++; return total ; }... int tab [ SIZE ] = {20,10,5,39,4,16,19,26,31,20}; int sum = sump ( tab, tab + SIZE ); (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada / 37
Tablice, funkcje - wprowadzenie
Tablice, funkcje - wprowadzenie Przemysław Gawroński D-10, p. 234 Wykład 5 25 marca 2019 (Wykład 5) Tablice, funkcje - wprowadzenie 25 marca 2019 1 / 12 Outline 1 Tablice jednowymiarowe 2 Funkcje (Wykład
Bardziej szczegółowoWskaźniki. Przemysław Gawroński D-10, p marca Wykład 2. (Wykład 2) Wskaźniki 8 marca / 17
Wskaźniki Przemysław Gawroński D-10, p. 234 Wykład 2 8 marca 2019 (Wykład 2) Wskaźniki 8 marca 2019 1 / 17 Outline 1 Wskaźniki 2 Tablice a wskaźniki 3 Dynamiczna alokacja pamięci (Wykład 2) Wskaźniki 8
Bardziej szczegółowoLab 9 Podstawy Programowania
Lab 9 Podstawy Programowania (Kaja.Gutowska@cs.put.poznan.pl) Wszystkie kody/fragmenty kodów dostępne w osobnym pliku.txt. Materiały pomocnicze: Wskaźnik to specjalny rodzaj zmiennej, w której zapisany
Bardziej szczegółowoWskaźniki w C. Anna Gogolińska
Wskaźniki w C Anna Gogolińska Zmienne Zmienną w C można traktować jako obszar w pamięci etykietowany nazwą zmiennej i zawierający jej wartość. Przykład: kod graficznie int a; a a = 3; a 3 Wskaźniki Wskaźnik
Bardziej szczegółowoZmienne, stałe i operatory
Zmienne, stałe i operatory Przemysław Gawroński D-10, p. 234 Wykład 2 4 marca 2019 (Wykład 2) Zmienne, stałe i operatory 4 marca 2019 1 / 21 Outline 1 Zmienne 2 Stałe 3 Operatory (Wykład 2) Zmienne, stałe
Bardziej szczegółowowykł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
i cz. 2 Programowanie uzupełnienie notatek: dr Jerzy Białkowski 1 i cz. 2 2 i cz. 2 3 Funkcje i cz. 2 typ nazwa ( lista-parametrów ) { deklaracje instrukcje } i cz. 2 typ nazwa ( lista-parametrów ) { deklaracje
Bardziej szczegółowoWskaźniki. Programowanie Proceduralne 1
Wskaźniki Programowanie Proceduralne 1 Adresy zmiennych Sterta 1 #include 2 3 int a = 2 ; 4 5 int main ( ) 6 { 7 int b = 3 ; 8 9 printf ( " adres zmiennej a %p\n", &a ) ; 10 printf ( " adres
Bardziej szczegółowoWskaźniki. Informatyka
Materiały Wskaźniki Informatyka Wskaźnik z punktu widzenia programisty jest grupą komórek pamięci (rozmiar wskaźnika zależy od architektury procesora, najczęściej są to dwa lub cztery bajty ), które mogą
Bardziej szczegółowoBiblioteka standardowa - operacje wejścia/wyjścia
Biblioteka standardowa - operacje wejścia/wyjścia Przemysław Gawroński D-10, p. 234 Wykład 6 15 stycznia 2019 (Wykład 6) Biblioteka standardowa - operacje wejścia/wyjścia 15 stycznia 2019 1 / 14 Outline
Bardziej szczegółowoJęzyki i metodyka programowania. Wskaźniki i tablice.
Wskaźniki i tablice. Zmienna1 Zmienna2 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 Zmienna to fragment pamięci o określonym rozmiarze identyfikowany za pomocą nazwy, w którym może być przechowywana
Bardziej szczegółowoint tab[5]; tab[1]; ciągły obszar pamięci, w którym umieszczone są elementy tego samego typu macierz [ ] - dwuargumentowy operator indeksowania
Rok akademicki 2013/2014, Pracownia nr 10 2/20 Informatyka 1 Tablica elementów ciągły obszar pamięci, w którym umieszczone są elementy tego samego typu Politechnika Białostocka - Wydział Elektryczny Elektrotechnika,
Bardziej szczegółowoPodstawy programowania. Wykład 6 Wskaźniki. Krzysztof Banaś Podstawy programowania 1
Podstawy programowania. Wykład 6 Wskaźniki Krzysztof Banaś Podstawy programowania 1 Adresy zmiennych Język C pozwala na operowanie adresami w pamięci stąd, między innymi, kwalifikowanie C jako języka relatywnie
Bardziej szczegółowoTablice (jedno i wielowymiarowe), łańcuchy znaków
Tablice (jedno i wielowymiarowe), łańcuchy znaków wer. 8 z drobnymi modyfikacjami! Wojciech Myszka Katedra Mechaniki i Inżynierii Materiałowej 2017-04-07 09:35:32 +0200 Zmienne Przypomnienie/podsumowanie
Bardziej szczegółowoPodstawy programowania 1
Podstawy programowania 1 Krzysztof Grudzień kgrudzi@kis.p.lodz.pl Wykład nr 2 1 Plan spotkań Wskaźniki Tablice jednowymiarowe & wska źniki. Programowanie w C. Wikibooks 2 Co to jest wskaźnik?? Wskaźnik
Bardziej szczegółowoPodstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1
Podstawy programowania. Wykład Funkcje Krzysztof Banaś Podstawy programowania 1 Programowanie proceduralne Pojęcie procedury (funkcji) programowanie proceduralne realizacja określonego zadania specyfikacja
Bardziej szczegółowoWskaźniki i dynamiczna alokacja pamięci. Spotkanie 4. Wskaźniki. Dynamiczna alokacja pamięci. Przykłady
Wskaźniki i dynamiczna alokacja pamięci. Spotkanie 4 Dr inż. Dariusz JĘDRZEJCZYK Wskaźniki Dynamiczna alokacja pamięci Przykłady 11/3/2016 AGH, Katedra Informatyki Stosowanej i Modelowania 2 Wskaźnik to
Bardziej szczegółowoWstęp do wskaźników w języku ANSI C
Wstęp do wskaźników w języku ANSI C / Materiał dydaktyczny pomocniczy do przedmiotu Informatyka sem.iii kier. Elektrotechnika/ 1. Wprowadzenie W języku ANSI C dla każdego typu X (wbudowanego, pochodnego,
Bardziej szczegółowoKURS C/C++ WYKŁAD 6. Wskaźniki
Wskaźniki KURS C/C++ WYKŁAD 6 Każda zmienna ma unikalny adres wskazujący początkowy obszar pamięci zajmowany przez tą zmienną. Ilość pamięci zajmowanej przez zmienną zależy od typu zmiennej. Adres można
Bardziej szczegółowoWykład nr 3. Temat: Wskaźniki i referencje. Edward Morgan Forster
Wykład nr 3 Temat: Wskaźniki i referencje. Cytaty: Mylić się jest rzeczą ludzką, ale żeby coś naprawdę spaprać potrzeba komputera. Edward Morgan Forster Gdyby murarze budowali domy tak, jak programiści
Bardziej szczegółowoPodstawy programowania. Wykład 6 Złożone typy danych: struktury, unie. Krzysztof Banaś Podstawy programowania 1
Podstawy programowania. Wykład 6 Złożone typy danych: struktury, unie Krzysztof Banaś Podstawy programowania 1 są sposobem na przechowywanie w ramach pojedynczej zmiennej zestawu zmiennych różnych typów,
Bardziej szczegółowoTablice i struktury. czyli złożone typy danych. Programowanie Proceduralne 1
Tablice i struktury czyli złożone typy danych. Programowanie Proceduralne 1 Tablica przechowuje elementy tego samego typu struktura jednorodna, homogeniczna Elementy identyfikowane liczbami (indeksem).
Bardziej szczegółowoTemat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych.
Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych. 1. Rodzaje pamięci używanej w programach Pamięć komputera, dostępna dla programu,
Bardziej szczegółowoPodstawy programowania skrót z wykładów:
Podstawy programowania skrót z wykładów: // komentarz jednowierszowy. /* */ komentarz wielowierszowy. # include dyrektywa preprocesora, załączająca biblioteki (pliki nagłówkowe). using namespace
Bardziej szczegółowoCo to jest sterta? Sterta (ang. heap) to obszar pamięci udostępniany przez system operacyjny wszystkim działającym programom (procesom).
Zarządzanie pamięcią Pamięć: stos i sterta Statyczny i dynamiczny przydział pamięci Funkcje ANSI C do zarządzania pamięcią Przykłady: Dynamiczna tablica jednowymiarowa Dynamiczna tablica dwuwymiarowa 154
Bardziej szczegółowoPodstawy programowania w języku C++
Podstawy programowania w języku C++ Część dziewiąta Tablice a zmienne wskaźnikowe Wersja skrócona, tylko C++ Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie
Bardziej szczegółowoTechniki Programowania wskaźniki
Techniki Programowania wskaźniki Łukasz Madej Katedra Informatyki Stosowanej i Modelowania Wykłady opracowane we współpracy z Danutą Szeligą, Łukaszem Sztangretem Wskaźniki Dla typu T zapis T* oznacza
Bardziej szczegółowoPodstawy programowania. Wykład 7 Tablice wielowymiarowe, SOA, AOS, itp. Krzysztof Banaś Podstawy programowania 1
Podstawy programowania. Wykład 7 Tablice wielowymiarowe, SOA, AOS, itp. Krzysztof Banaś Podstawy programowania 1 Tablice wielowymiarowe C umożliwia definiowanie tablic wielowymiarowych najczęściej stosowane
Bardziej szczegółowoKURS C/C++ WYKŁAD 8. Deklaracja funkcji informuje komplilator jaką wartość funkcja będzie zwracała i jakiego typu są jej argumenty.
Funkcje. Deklaracja funkcji: KURS C/C++ WYKŁAD 8 #include //deklaracje funkcji: printf(...), scanf(...) #include //double sqrt (double ) #include //void clrscr (void) void main
Bardziej szczegółowoZASADY PROGRAMOWANIA KOMPUTERÓW
POLITECHNIKA WARSZAWSKA Instytut Automatyki i i Robotyki ZASADY PROGRAMOWANIA KOMPUTERÓW Język Język programowania: C/C++ Środowisko programistyczne: C++Builder 6 Wykład 9.. Wskaźniki i i zmienne dynamiczne.
Bardziej szczegółowoJĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 6
JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM Wykład 6 1 SPECYFIKATOR static Specyfikator static: Specyfikator ten powoduje, że zmienna lokalna definiowana w obrębie danej funkcji nie jest niszczona
Bardziej szczegółowoWstęp do programowania INP001213Wcl rok akademicki 2018/19 semestr zimowy. Wykład 4. Karol Tarnowski A-1 p.
Wstęp do programowania INP001213Wcl rok akademicki 2018/19 semestr zimowy Wykład 4 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji Tablice Wskaźniki Adresy pamięci Operator adresu
Bardziej szczegółowo1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość
1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość 2. Poprawna definicja wskażnika b to: a) float *a, **b = &a; b) float
Bardziej szczegółowoFunctionalization. Funkcje w C. Marcin Makowski. 30 listopada Zak lad Chemii Teoretycznej UJ
w C Zak lad Chemii Teoretycznej UJ 30 listopada 2006 1 2 3 Inicjalizacja zmiennych Zmienne jednowymiarowe można inicjować przy ich definicji. #include i n t x = 1 ; l o n g day = 1000L * 60L
Bardziej szczegółowoMETODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02
METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE Wykład 02 NAJPROSTSZY PROGRAM /* (Prawie) najprostszy przykład programu w C */ /*==================*/ /* Między tymi znaczkami można pisać, co się
Bardziej szczegółowoJęzyki programowania obiektowego Nieobiektowe elementy języka C++
Języki programowania obiektowego Nieobiektowe elementy języka C++ Roman Simiński roman.siminski@us.edu.pl www.programowanie.siminskionline.pl Przetwarzanie tablic znaków Łańcuchy znakowe jako tablice znaków
Bardziej szczegółowoProgramowanie w C++ Wykład 4. Katarzyna Grzelak. 19 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 37
Programowanie w C++ Wykład 4 Katarzyna Grzelak 19 marca 2018 K.Grzelak (Wykład 1) Programowanie w C++ 1 / 37 Funkcje cd K.Grzelak (Wykład 1) Programowanie w C++ 2 / 37 Funkcja powtórzenie Funkcje == podprogramy
Bardziej szczegółowo6 Przygotował: mgr inż. Maciej Lasota
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
Bardziej szczegółowoczęść 8 wskaźniki - podstawy Jarosław Gramacki Instytut Informatyki i Elektroniki Podstawowe pojęcia
Język ANSI C część 8 wskaźniki - podstawy Jarosław Gramacki Instytut Informatyki i Elektroniki Podstawowe pojęcia najbardziej podstawowe operacje na wskaźnikach int x = 1, y = 2, Tab[10]; int *ip; // czy
Bardziej szczegółowoPodstawy programowania w języku C++
Podstawy programowania w języku C++ Część siódma Przetwarzanie tablic znaków Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie zawiera skrót treści wykładu,
Bardziej szczegółowoDYNAMICZNE PRZYDZIELANIE PAMIECI
DYNAMICZNE PRZYDZIELANIE PAMIECI Pamięć komputera, dostępna dla programu, dzieli się na cztery obszary: kod programu, dane statyczne ( np. stałe i zmienne globalne programu), dane automatyczne zmienne
Bardziej szczegółowoJęzyki programowania. Przetwarzanie tablic znaków. Część druga. Autorzy Tomasz Xięski Roman Simiński
Języki programowania Część druga Przetwarzanie tablic znaków Autorzy Tomasz Xięski Roman Simiński Niniejsze opracowanie zawiera skrót treści wykładu, lektura tych materiałów nie zastąpi uważnego w nim
Bardziej szczegółowo1 Wskaźniki i zmienne dynamiczne, instrukcja przed zajęciami
1 Wskaźniki i zmienne dynamiczne, instrukcja przed zajęciami Celem tych zajęć jest zrozumienie i oswojenie z technikami programowania przy pomocy wskaźników w języku C++. Proszę przeczytać rozdział 8.
Bardziej szczegółowoPodstawy programowania
Podstawy programowania Część siódma Przetwarzanie tablic znaków Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.programowanie.siminskionline.pl Niniejsze opracowanie zawiera skrót treści wykładu,
Bardziej szczegółowowykład III uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C - zarządzanie pamięcią, struktury,
, Programowanie, uzupełnienie notatek: dr Jerzy Białkowski , 1 2 3 4 , Wczytywanie liczb , Wczytywanie liczb 1 #include 2 #include < s t d l i b. h> 3 4 int main ( ) { 5 int rozmiar, numer
Bardziej szczegółowo> C++ wskaźniki. Dane: Iwona Polak. Uniwersytet Śląski Instytut Informatyki 26 kwietnia 2017
> C++ wskaźniki Dane: Iwona Polak iwona.polak@us.edu.pl Uniwersytet Śląski Instytut Informatyki 26 kwietnia 2017 >??? Co to jest WSKAŹNIK? ++ wskaźniki 2 / 20 >??? Co to jest WSKAŹNIK? To po prostu ADRES
Bardziej szczegółowoPodstawy programowania
Podstawy programowania I rok Automatyka i Robotyka Eka PWr Ćwiczenia Zestaw 4 Zakres materiału Analiza poprawności konstrukcji, wyliczanie wyrażeń z wskaźnikami i tablicami, ręczna symulacja, opracowywanie
Bardziej szczegółowoPodstawy programowania komputerów
Podstawy programowania komputerów Wykład 10: Sterowanie pamięcią w C Pamięć na stosie!każdy program napisany w języku C ma dostęp do dwóch obszarów pamięci - stosu i sterty, w których może być przechowywana
Bardziej szczegółowomain( ) main( void ) main( int argc, char argv[ ] ) int MAX ( int liczba_1, liczba_2, liczba_3 ) źle!
Funkcja wysoce niezależny blok definicji i instrukcji programu (podprogram) Każdy program napisany w języku C/C++ zawiera przynajmniej jedną funkcję o predefiniowanej nazwie: main( ). Najczęściej wykorzystuje
Bardziej szczegółowoStałe i zmienne znakowe. Stała znakowa: znak
Stałe i zmienne znakowe. Stała znakowa: znak Na przykład: a, 1, 0 c Każdy znak jest reprezentowany w pamięci przez swój kod. Kody alfanumerycznych znaków ASCII to liczby z przedziału [32, 127]. Liczby
Bardziej szczegółowoMateriał Typy zmiennych Instrukcje warunkowe Pętle Tablice statyczne Wskaźniki Tablice dynamiczne Referencje Funkcje
Podstawy informatyki Informatyka stosowana - studia niestacjonarne - Zajęcia nr 4 Grzegorz Smyk Wydział Inżynierii Metali i Informatyki Przemysłowej Akademia Górniczo Hutnicza im. Stanisława Staszica w
Bardziej szczegółowoJęzyk C zajęcia nr 11. Funkcje
Język C zajęcia nr 11 Funkcje W języku C idea podprogramów realizowana jest wyłącznie poprzez definiowanie i wywołanie funkcji. Każda funkcja musi być przed wywołaniem zadeklarowana. Deklaracja funkcji
Bardziej szczegółowoTablice i funkcje. Marcin Makowski. 26 listopada Zak lad Chemii Teoretycznej UJ
Zak lad Chemii Teoretycznej UJ 26 listopada 2007 wielowymiarowe 1 2 wielowymiarowe 3 Typ tablicowy Plan wielowymiarowe Tablica Zajmujacy spójny obszar w pamieci zestaw zmiennych (obiektów) tego samego
Bardziej szczegółowo2 Przygotował: mgr inż. Maciej Lasota
Laboratorium nr 2 1/7 Język C Instrukcja laboratoryjna Temat: Wprowadzenie do języka C 2 Przygotował: mgr inż. Maciej Lasota 1) Wprowadzenie do języka C. Język C jest językiem programowania ogólnego zastosowania
Bardziej szczegółowoPodstawy programowania. Wykład Pętle. Tablice. Krzysztof Banaś Podstawy programowania 1
Podstawy programowania. Wykład Pętle. Tablice. Krzysztof Banaś Podstawy programowania 1 Pętle Pętla jest konstrukcją sterującą stosowaną w celu wielokrotnego wykonania tego samego zestawu instrukcji jednokrotne
Bardziej szczegółowoProgramowanie w języku C++
Programowanie w języku C++ Część siódma Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie zawiera skrót treści wykładu, lektura tych materiałów nie zastąpi
Bardziej szczegółowoFunkcja (podprogram) void
Funkcje Co to jest funkcja? Budowa funkcji Deklaracja, definicja i wywołanie funkcji Przykłady funkcji definiowanych przez programistę Przekazywanie argumentów do funkcji Tablica jako argument funkcji
Bardziej szczegółowoStałe, znaki, łańcuchy znaków, wejście i wyjście sformatowane
Stałe, znaki, łańcuchy znaków, wejście i wyjście sformatowane Stałe Oprócz zmiennych w programie mamy też stałe, które jak sama nazwa mówi, zachowują swoją wartość przez cały czas działania programu. Można
Bardziej szczegółowoPROE wykład 2 operacje na wskaźnikach. dr inż. Jacek Naruniec
PROE wykład 2 operacje na wskaźnikach dr inż. Jacek Naruniec Zmienne automatyczne i dynamiczne Zmienne automatyczne: dotyczą kontekstu, po jego opuszczeniu są usuwane, łatwiejsze w zarządzaniu od zmiennych
Bardziej szczegółowoLaboratorium 3: Tablice, tablice znaków i funkcje operujące na ciągach znaków. dr inż. Arkadiusz Chrobot dr inż. Grzegorz Łukawski
Laboratorium 3: Tablice, tablice znaków i funkcje operujące na ciągach znaków dr inż. Arkadiusz Chrobot dr inż. Grzegorz Łukawski 7 kwietnia 2014 1. Wprowadzenie Pierwsza część instrukcji zawiera informacje
Bardziej szczegółowoWykład 1: Wskaźniki i zmienne dynamiczne
Programowanie obiektowe Wykład 1: Wskaźniki i zmienne dynamiczne 1 dr Artur Bartoszewski - Programowanie obiektowe, sem. 1I- WYKŁAD Podstawy programowania w C++ Wskaźniki 2 dr Artur Bartoszewski - Programowanie
Bardziej szczegółowoTABLICE W JĘZYKU C/C++ typ_elementu nazwa_tablicy [wymiar_1][wymiar_2]... [wymiar_n] ;
Ogólna postać definicji tablicy: TABLICE W JĘZYKU C/C++ typ_elementu nazwa_tablicy [wymiar_1][wymiar_2]... [wymiar_n] ; np. int tablica [ 10 ]; // 10-cio elementowa tablica liczb całkowitych char tekst
Bardziej szczegółowoPodstawy programowania w języku C++
Podstawy programowania w języku C++ Część ósma Zmienne wskaźnikowe koncepcja, podstawowe zastosowania Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie
Bardziej szczegółowoPodstawy programowania w języku C++
Podstawy programowania w języku C++ Część ósma Zmienne wskaźnikowe koncepcja, podstawowe zastosowania Wersja skrócona, tylko C++ Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.us.edu.pl/~siminski
Bardziej szczegółowoPARADYGMATY PROGRAMOWANIA Wykład 4
PARADYGMATY PROGRAMOWANIA Wykład 4 Metody wirtualne i polimorfizm Metoda wirualna - metoda używana w identyczny sposób w całej hierarchii klas. Wybór funkcji, którą należy wykonać po wywołaniu metody wirtualnej
Bardziej szczegółowoJęzyk C, tablice i funkcje (laboratorium, EE1-DI)
Język C, tablice i funkcje (laboratorium, EE1-DI) Opracował: Tomasz Mączka (tmaczka@kia.prz.edu.pl) Wstęp (tablice) Tablica to uporządkowany ciąg elementów tego samego typu, zajmujących ciągły obszar pamięci.
Bardziej szczegółowoTablice deklaracja, reprezentacja wewnętrzna
Tablice deklaracja, reprezentacja wewnętrzna Tablica jest zmienną złożoną z elementów tego samego typu. Obejmuje ona ciągły obszar pamięci operacyjnej dokładnie tak duży, aby zmieścić wszystkie jej elementy.
Bardziej szczegółowoStrona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta 16.09.2006. Strona 1 z 26. Powrót. Full Screen. Zamknij.
Programowanie Sobera Jolanta 16.09.2006 Strona 1 z 26 1 Wprowadzenie do programowania 4 2 Pierwsza aplikacja 5 3 Typy danych 6 4 Operatory 9 Strona 2 z 26 5 Instrukcje sterujące 12 6 Podprogramy 15 7 Tablice
Bardziej szczegółowoTypy złożone. Struktury, pola bitowe i unie. Programowanie Proceduralne 1
Typy złożone Struktury, pola bitowe i unie. Programowanie Proceduralne 1 Typy podstawowe Typy całkowite: char short int long Typy zmiennopozycyjne float double Modyfikatory : unsigned, signed Typ wskaźnikowy
Bardziej szczegółowoWskaź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:
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: typ nw; /* definicja zmiennej nw typu typ */ typ *w_nw; /* definicja
Bardziej szczegółowoPliki. Informacje ogólne. Obsługa plików w języku C
Pliki Informacje ogólne Plik jest pewnym zbiorem danych, zapisanym w systemie plików na nośniku danych (np. dysku twardym, pendrive, płycie DVD itp.). Może posiadać określone atrybuty, a odwołanie do niego
Bardziej szczegółowoWskaźnik może wskazywać na jakąś zmienną, strukturę, tablicę a nawet funkcję. Oto podstawowe operatory niezbędne do operowania wskaźnikami:
Wskaźniki są nieodłącznym elementem języka C. W języku C++ także są przydatne i korzystanie z nich ułatwia pracę, jednak w odróżnieniu do C wiele rzeczy da się osiągnąć bez ich użycia. Poprawne operowanie
Bardziej szczegółowoWskaźniki, funkcje i tablice
, funkcje i tablice Zak lad Chemii Teoretycznej UJ 20 listopada 2008 wielowymiarowe 1 2 3 4 wielowymiarowe, funkcje i tablice Czym sa wskaźniki? Plan wielowymiarowe Zmienne wskaźnikowe wskazuja na inne
Bardziej szczegółowoW2 Wprowadzenie do klas C++ Klasa najważniejsze pojęcie C++. To jest mechanizm do tworzenia obiektów. Deklaracje klasy :
Wprowadzenie do klas C++ Klasa najważniejsze pojęcie C++. To jest mechanizm do tworzenia obiektów. Deklaracje klasy : class nazwa_klasy prywatne dane i funkcje public: publiczne dane i funkcje lista_obiektów;
Bardziej szczegółowoISO/ANSI C - funkcje. Funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje
Funkcje (podprogramy) Mianem funkcji określa się fragment kodu, który może być wykonywany wielokrotnie z różnych miejsc programu. Ogólny zapis: typ nazwa(argumenty) ciało funkcji typ określa typ danych
Bardziej szczegółowoWstęp do programowania INP003203L rok akademicki 2018/19 semestr zimowy. Laboratorium 2. Karol Tarnowski A-1 p.
Wstęp do programowania INP003203L rok akademicki 2018/19 semestr zimowy Laboratorium 2 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji Komentarze Funkcja printf() Zmienne Łańcuchy
Bardziej szczegółowoProgramowanie I C / C++ laboratorium 03 arytmetyka, operatory
Programowanie I C / C++ laboratorium 03 arytmetyka, operatory Jarosław Piersa Wydział Matematyki i Informatyki, Uniwersytet Mikołaja Kopernika 2013-02-19 Typ znakowy Typ znakowy Typ wyliczeniowy # include
Bardziej szczegółowoProgramowanie obiektowe Wykład 3. Dariusz Wardowski. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/21
Dariusz Wardowski dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/21 Przydzielanie pamięci Poniżej przedstawiono w C++ dwie klasy obrazujące sposób rezerwacji pamięci. class Osoba char imie[30];
Bardziej szczegółowoWykład 3 Składnia języka C# (cz. 2)
Wizualne systemy programowania Wykład 3 Składnia języka C# (cz. 2) 1 dr Artur Bartoszewski -Wizualne systemy programowania, sem. III- WYKŁAD Wizualne systemy programowania Metody 2 Metody W C# nie jest
Bardziej szczegółowoDr inż. Grażyna KRUPIŃSKA. D-10 pokój 227 WYKŁAD 7 WSTĘP DO INFORMATYKI
Dr inż. Grażyna KRUPIŃSKA Grazyna.Krupinska@fis.agh.edu.pl D-10 pokój 227 WYKŁAD 7 WSTĘP DO INFORMATYKI Wyrażenia 2 Wyrażenia w języku C są bardziej elastyczne niż wyrażenia w jakimkolwiek innym języku
Bardziej szczegółowoProgramowanie proceduralne INP001210WL rok akademicki 2018/19 semestr letni. Wykład 6. Karol Tarnowski A-1 p.
Programowanie proceduralne INP001210WL rok akademicki 2018/19 semestr letni Wykład 6 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji Wskaźnik do pliku Dostęp do pliku: zapis, odczyt,
Bardziej szczegółowoŁAŃCUCHY W JĘZYKU C/C++
ŁAŃCUCHY W JĘZYKU C/C++ Stała tekstowa / łańcuchowa jest tablicą znaków zakończoną znakiem o kodzie: 0 np. stała łańcuchowa: Jestem tekstem... 74 101 115 116 101 109 32 116 101 107 115 116 101 109 0......
Bardziej szczegółowoElementy języka C. ACprogramislikeafastdanceonanewlywaxeddancefloorbypeople carrying razors.
Wykład 3 ACprogramislikeafastdanceonanewlywaxeddancefloorbypeople carrying razors. Waldi Ravens J. Cichoń, P. Kobylański Wstęp do Informatyki i Programowania 75 / 146 deklaracje zmiennych instrukcja podstawienia
Bardziej szczegółowoWykład 5: Klasy cz. 3
Programowanie obiektowe Wykład 5: cz. 3 1 dr Artur Bartoszewski - Programowanie obiektowe, sem. 1I- WYKŁAD - podstawy Konstruktor i destruktor (część I) 2 Konstruktor i destruktor KONSTRUKTOR Dla przykładu
Bardziej szczegółowoIMIĘ i NAZWISKO: Pytania i (przykładowe) Odpowiedzi
IMIĘ i NAZWISKO: Pytania i (przykładowe) Odpowiedzi EGZAMIN PIERWSZY (25 CZERWCA 2013) JĘZYK C++ poprawiam ocenę pozytywną z egzaminu 0 (zakreśl poniżej x) 1. Wśród poniższych wskaż poprawną formę definicji
Bardziej szczegółowoProgramowanie komputerowe. Zajęcia 4
Programowanie komputerowe Zajęcia 4 Typ logiczny Wartości logiczne są reprezentowane przez typ bool. Typ bool posiada tylko dwie wartości: true i false. Zamiast wartości logicznych można używać wartości
Bardziej szczegółowoPodstawy Programowania C++
Wykład 3 - podstawowe konstrukcje Instytut Automatyki i Robotyki Warszawa, 2014 Wstęp Plan wykładu Struktura programu, instrukcja przypisania, podstawowe typy danych, zapis i odczyt danych, wyrażenia:
Bardziej szczegółowoPodstawy informatyki. Informatyka stosowana - studia niestacjonarne. Grzegorz Smyk. Wydział Inżynierii Metali i Informatyki Przemysłowej
Podstawy informatyki Informatyka stosowana - studia niestacjonarne Grzegorz Smyk Wydział Inżynierii Metali i Informatyki Przemysłowej Akademia Górniczo Hutnicza im. Stanisława Staszica w Krakowie, rok
Bardziej szczegółowoProgramowanie w elektronice: Podstawy C
Programowanie w elektronice: Podstawy C Projekt Matematyka dla Ciekawych Świata, Robert Ryszard Paciorek 2019-05-05 C / C++ są najpopularniejszymi językami kompilowanymi do kodu maszynowego
Bardziej szczegółowoProgramowanie w C++ Wykład 5. Katarzyna Grzelak. 26 marca kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 40
Programowanie w C++ Wykład 5 Katarzyna Grzelak 26 marca 2018 9 kwietnia 2018 K.Grzelak (Wykład 1) Programowanie w C++ 1 / 40 Pojęcia z poprzedniego wykładu Podział programu na funkcje podział na niezależne
Bardziej szczegółowoC++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów
Operatory są elementami języka C++. Istnieje zasada, że z elementami języka, takimi jak np. słowa kluczowe, nie można dokonywać żadnych zmian, przeciążeń, itp. PRZECIĄŻANIE OPERATORÓW Ale dla operatorów
Bardziej szczegółowoWykład 4: Klasy i Metody
Wykład 4: Klasy i Metody Klasa Podstawa języka. Każde pojęcie które chcemy opisać w języku musi być zawarte w definicji klasy. Klasa definiuje nowy typ danych, których wartościami są obiekty: klasa to
Bardziej szczegółowoJęzyk C, tablice i funkcje (laboratorium)
Język C, tablice i funkcje (laboratorium) Opracował: Tomasz Mączka (tmaczka@kia.prz.edu.pl) Wstęp (tablice) Tablica to uporządkowany ciąg elementów tego samego typu, zajmujących ciągły obszar pamięci.
Bardziej szczegółowoPodstawowe elementy proceduralne w C++ Program i wyjście. Zmienne i arytmetyka. Wskaźniki i tablice. Testy i pętle. Funkcje.
Podstawowe elementy proceduralne w C++ Program i wyjście Zmienne i arytmetyka Wskaźniki i tablice Testy i pętle Funkcje Pierwszy program // Niezbędne zaklęcia przygotowawcze ;-) #include using
Bardziej szczegółowoWprowadzenie do programowania w języku C
Wprowadzenie do programowania w języku C Część szósta Zmienne wskaźnikowe koncepcja, zastosowania, sztuczki i triki Autor Roman Simiński Kontakt siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie
Bardziej szczegółowonowe operatory &. (kropka) * operator rzutowy ->, (przecinek) sizeof
nowe operatory &. (kropka) * operator rzutowy ->, (przecinek) sizeof 1 adres zmiennej Do pobrania adresu zmiennej używa się jednoargumentowego operatora & (uwaga & może mieć także znaczenie dwuargumentowego
Bardziej szczegółowoFunkcje przeciążone, konstruktory kopiujące, argumenty domyślne
Funkcje przeciążone, konstruktory kopiujące, argumenty domyślne Przeciążenie funkcji polega na użyciu funkcji z tą samą nazwą, które mają różne listy argumentów(różne typy, różna ilość lub to i inne).
Bardziej szczegółowoStruktury - wprowadzenie
Struktury - wprowadzenie Przemysław Gawroński D-10, p. 234 Wykład 6 5 kwietnia 2019 (Wykład 6) Struktury - wprowadzenie 5 kwietnia 2019 1 / 12 Outline 1 Struktury (Wykład 6) Struktury - wprowadzenie 5
Bardziej szczegółowoWstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 6. Karol Tarnowski A-1 p.
Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy Wykład 6 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji Funkcje w języku C Zasięg zmiennych Przekazywanie
Bardziej szczegółowoKonwersje napis <-> liczba Struktury, unie Scanf / printf Wskaźniki
Konwersje napis liczba Struktury, unie Scanf / printf Wskaźniki Konwersje liczba napis Ćwiczenia 1. Napisz aplikację, która na wejściu dostaje napis postaci W Roku Pańskim 1345, władca Henryk 12,
Bardziej szczegółowo