To tylko jedna z 7 stron tej notatki. Zaloguj się aby zobaczyć ten dokument.
Zobacz
całą notatkę
WSKAŹNIKI I TABLICE WIELOWYMIAROWE
1) Operacje na tablicach wielowymiarowych w zapisie indeksowym:
int tab[ 3 ][ 5 ] ;
int i, j ;
for( i=0 ; i tab[ i ] [ j ];
2) Reprezentacja tablicy int tab[3][5] w pamięci komputera:
tab
tab+1
wiersz_0
wiersz_1
∗(tab+2)+3
tab+2
wiersz_2
3) Operacje na tablicy dwuwymiarowej w zapisie wskaźnikowym:
int tab[ 3 ][ 5 ] ;
int i, j ;
for( i=0 ; i ∗(∗(tab + i) + j) ;
4) Operacje na tablicy dwuwymiarowej bez wykorzystywania indeksów liczbowych:
int tab[ 3 ][ 5 ] ;
int (∗wsk_w) [ 5 ] ;
int∗ wsk_k ;
// wskaźnik na wiersz tzn. na 5-cio elementową tablicę int
// wskaźnik na kolumnę tzn. na liczbę int
for( wsk_w = tab ; wsk_w
...
clrscr ;
// podanie samej nazwy funkcji jest równowaŜne podaniu adresu
// i nie powoduje Ŝadnej akcji (podobnie jak polecenie 10 ; )
clrscr() ;
// nazwa funkcji z nawiasami () jest traktowana jako „wywolanie
// funkcji” tzn. polecenie wykonania fragmentu kodu umieszczo// nego pod podanym adresem
→ moŜliwość pośredniego dostępu do funkcji (poprzez zmienną zawierającą
(…)
… wskaźników” na tablice:
tabD
bD
∗tabD
∗ (t
ab
D+
2)
int
int
int
..
∗
∗∗(tabD+1)
∗
∗
.
int
int
int
int
int
int
int
int
int
int
int
int ∗∗
ta
∗∗
int
int
int
int
∗ ( ∗ (tabD+2)+3)
// przykładowy program tworzący dynamiczna strukturę danych j.w.
int∗∗ tabD = new int∗ [4];
// lub równowaŜnie:
for( int i=0; i<4; i++ )
// for( int i=0; i<4; i++ )
*(tabD+i) = new int [5];
//
tabD[ i ] = new int [5];
// zapis liczby…
… algorytmu sortowania szybkiego (ang. quick sort)
pozwalająca sortować tablice obiektów dowolnego typu
według dowolnego zadanego kryterium (funkcji definiującej relację porządku)
prototyp funkcji:
void qsort(
void ∗base,
size_t nelem,
size_t width,
int (∗fcmp)( void ∗, void ∗)
// adres poczatku sortowanego obszaru
// ilosc sortowanych elementów
// rozmiar pojedynczego elementu
// adres funkcji porównująca…
… ), wedlug_nazwisk );
}
M.Piasecki: JĘZYKI PROGRAMOWANIA (1)
−5−
(W11) Wskazania na funkcje
PRZYKŁADY RÓśNYCH KOMBINACJI WSKAŹNIKÓW
Przykładowe elementy:
float LICZBA;
// liczba rzeczywista float
int TAB_INT [ 5 ];
// 5-cio elementowa tablica liczb int
double FUNKCJA ( int x )
{
return x+0.1;
}
// funkcja z parametrem int zwracająca
// wartość double
Wskaźniki na w/w elementy:
float∗ wsk_liczby ;
wsk_liczby…
… WSKAŹNIKI I TABLICE WIELOWYMIAROWE
1) Operacje na tablicach wielowymiarowych w zapisie indeksowym:
int tab[ 3 ][ 5 ] ;
int i, j ;
for( i=0 ; i<3 ; i++ )
for( j=0 ; j<5 ; j++ )
{
printf( ”TAB[%d, %d]= ”, i, j );
scanf( ”%d” , &tab[ i ][ j ] );
}
// cout<<”TAB[”<< i <<”,”<< j <<”]=”;
// cin >> tab[ i ] [ j ];
2) Reprezentacja tablicy int tab[3][5] w pamięci komputera:
tab
tab+1
wiersz_0
wiersz_1
∗(tab+2)+3
tab+2
wiersz_2
3) Operacje na tablicy dwuwymiarowej w zapisie wskaźnikowym:
int tab[ 3 ][ 5 ] ;
int i, j ;
for( i=0 ; i<3 ; i++ )
for( j=0 ; j<5 ; j++ )
{
printf( ” TAB[ %d , %d ]= ”, i, j );
scanf( ”%d” , ∗(tab + i) + j );
}
// scanf(”%d”, & ∗(∗(tab + i) + j) );
//
cin >> ∗(∗(tab + i) + j) ;
4) Operacje na tablicy dwuwymiarowej bez wykorzystywania indeksów liczbowych:
int tab[ 3 ][ 5…
…( const void ∗wsk_1, const void ∗wsk_2)
{
return( strcmp( (char ∗) wsk_1, (char ∗) wsk_2) );
}
void main( void )
{
char tab_tekstow[5][10] = { "Opel", "Audi", "Ford", "Trabant", "Fiat" };
qsort( tab_tekstow, 5, sizeof( tab_tekstow[0] ) , teksty_rosnaco );
}
Przykład sortowania bazy danych (tablicy struktur)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct student
{
char nazwisko[31…
... zobacz całą notatkę
Komentarze użytkowników (0)