Środowisko programisty/C - tablice i wskaźniki: Różnice pomiędzy wersjami
Linia 1: | Linia 1: | ||
== Tablice == | == Tablice == | ||
=== Wstęp === | |||
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 | 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 | ||
Linia 5: | Linia 7: | ||
int liczby[10]; | 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]. | 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 === | |||
== Wskaźniki == | == Wskaźniki == | ||
=== Allokacja pamięci === | === Allokacja pamięci === | ||
== Błędy == | == Błędy == |
Wersja z 11:36, 21 wrz 2006
Tablice
Wstęp
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