Tablice w C++

Tablice

Tablice to uporządkowane zbiory danych i występują praktycznie w każdym języku. Tablice w C++ są dość dobrze "rozbudowane". Mogą to być tablice statyczne bądź dynamiczne. Teraz zajmiemy się prostymi tablicami statyczynimi, czyli tablicamy o rozmiarze znanym (i stałym) przed wykonaniem programu. Tablice można definiować na kilka sposobów:
const int N = 20;
int tab1[100],
tab2[N],
tab3[] = {1, 2, 3, 4, 5 },
tab4[5] = {1, 2};
Tab1 tworzy tablicę zawierającą 100 elementów, tab2 20 elementową - ilość elementów pochodzi ze zmiennej o stałej wartości (const). Użycie zwykłej zmiennej zakończyłoby się błędem. tab3 utworzy 5-elementową tablicę o podanych wartościach, tab4 pięcioelementową tablicę, gdzie pozostałe, niezadeklarowane wartości będą zerami.
Jeszcze jedna sprawa - typ int - oznacza to że tworzymy np. dla tab1 100 elementową tablicę danych typu int.

Funkcja sizeof(tablica) zwróci rozmiar tablicy w bajtach a znając rozmiar bajtowy użytego typu danych da nam liczbę elementów (choć to rozwiązanie ma pewne wady, patrz komentarze...):
sizeof(tab) / sizeof(int)
Jeżeli przesyłamy tablicę do funkcji to tak naprawdę przesłany zostanie wskaźnik do tej tablicy, co dodatkowo wymusza przesłanie jej rozmiaru.
#include<iostream>
using namespace std;

void funkcja(double tab[])
	{
	cout << "Funkcja : Wymiar w bajtach tab: " << sizeof(tab) << endl;
	cout << "Funkcja : Wartość *tab - pierwszy element: " << tab[0] << endl;
	}

int main()
	{
	double tab[] = {5, 7, 33, 44, 1};
	cout << "Wymiar w bajtach tab: " << sizeof(tab) << endl;
	cout << "Wartość *tab - pierwszy element: " << *tab << endl;
	funkcja(tab);
	}
Co da nam:
Wymiar w bajtach tab: 40
Wartość *tab - pierwszy element: 5
Funkcja : Wymiar w bajtach tab: 4
Funkcja : Wartość *tab - pierwszy element: 5
Wymiar w bajtach: 5 elementów po 8 bajtów daje 40, lecz w funkcji do której tablica została przesłana wyszło 4 - rozmiar wskaźnika. Jak widać nie wpłynęło to na dane tablicy. Pierwszy element w obu przypadkach jest taki sam.

Tablice znaków

#include<iostream>
using namespace std;

int main()
	{
	char tab1[] = "Mlotek";
	char tab2[] = {'M', 'l', 'o', 't', 'e', 'k', ' '};
	cout << "Wymiar w bajtach tab1: " << sizeof(tab1) << endl;
	cout << "Wymiar w bajtach tab2: " << sizeof(tab2) << endl;
	cout << "Wartość *tab1 - pierwszy element: " << *tab1 << endl;
	}
W tym przykładzie tablice zawierają dane typu char czyli są literałami. Obie tablice mają taki sam rozmiar - 7 (mimo iż w tab1 mamy 1 wyraz). Znak oznacza koniec zapisu i w przypadku pierwszej tablicy dodawany jest automatycznie.
RkBlog

C/C++ i Java, 14 July 2008

Comment article
Comment article RkBlog main page Search RSS Contact