Środowisko programisty/C - tablice i wskaźniki

Z Studia Informatyczne
Wersja z dnia 11:25, 27 wrz 2006 autorstwa Dorota (dyskusja | edycje)
(różn.) ← poprzednia wersja | przejdź do aktualnej wersji (różn.) | następna wersja → (różn.)
Przejdź do nawigacjiPrzejdź do wyszukiwania

Tablice

Definicja

W języku C tablice definiuje się za pomocą składni nawiasów kwadratowych. Na przykład 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ą

  1. * zawatość zmiennej wskazywanej przez wskaźnik
  2. & 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;
}