Środowisko programisty/C - tablice i wskaźniki
Tablice
Definicja
W języku C tablice definiuje się za pomocą składni nawiasów kwadratowych. Przykładowo tablica zawierająca 10 liczb całkowitych może wyglądać następująco
int liczby[10];
W przeciwieństwie do Pascala pozycje tablicy są indeksowane od zera, a nie od jedynki. Czyli kolejne pozycje w tablicy liczby to: liczby[0], liczby[1], ..., liczby[9].
Sprawdzanie zakresów
W C nie ma automatycznej kontroli zakresów tablic, czyli można w kodzie programu napisać liczby[10], a nawet liczby[-1] i to zostanie poprawnie skompilowane, po czym program może zacząć działać niepoprawnie.
A teraz, zupełnie z innej beczki, dziwny przykład:
#include <stdio.h> int main() { int a[2]; int b[2]; a[1] = 0; printf("%d\n", a[1]); b[3] = 100; // To nie jest normalne!! printf("%d\n", a[1]); return 0; }
Program powinien się wywalić na linii b[3] = 1 (bo tablica b ma elementy 0 i 1), a jeśli się nie wywala, to powinien przynajmniej wypisać dwa razy 0 (bo to jest wartość a[1]), podczas gdy z dużym prawdopodobieństwem wypisze:
0 100
Tablice wielowymiarowe
Istnieje możliwość tworzenia tablic wielowymiarowych, korzystając z konstrukcji:
typ tablica[rozmiar1][rozmiar2]....
Przykładowo tabliczkę mnożenia 10x10 można wypisać w sposób następujący:
include <stdio.h> int main() { int tabliczka[10][10]; int i, j; for(i = 1; i <= 10; i++) for(j = 1; j <= 10; j++) tabliczka[i-1][j-1] = i * j; for(i = 0; i < 10; i++) { for(j = 0; j < 10; j++) printf("%d ", tabliczka[i][j]); printf("\n"); } return 0; }
Wskaźniki
Wskaźniki są bardzo ciekawym rodzajem zmiennych w C, gdyż w przeciwieństwie do Pascala, można na nich wykonywać operacje arytmetyczne. Wskaźniki deklaruje się poprzedzając nazwę zmiennej gwiazdką.
int zmienna; int *wskaznik;
Można to zrobić w jednej linijce:
int zmienna, *wskaznik;
Dwoma podstawowymi operatorami związanymi ze wskaźnikami są
- * zawatość zmiennej wskazywanej przez wskaźnik
- & adres zmiennej
Sprawdźmy działanie wskaźników na przykładzie:
#include <stdio.h> int main() { int zmienna; int *wskaznik;
zmienna = 1; printf("%d\n", zmienna); wskaznik = &zmienna; *wskaznik = 2; printf("%d\n", zmienna); printf("%d\n", *wskaznik); zmienna = 3; printf("%d\n", zmienna); printf("%d\n", *wskaznik); return 0; }