Tablice w C++: Deklaracja, inicjalizacja i wskaźniki (przykłady)
⚡ Inteligentne podsumowanie
Tablica w C++ to zbiór elementów tego samego typu danych przechowywanych w ciągłych komórkach pamięci. Tutaj nauczysz się deklarować, inicjować i uzyskiwać dostęp do tablic, poznasz typy tablic oraz ich zalety i wady.
Co to jest tablica?
Tablica to struktura danych, która przechowuje sekwencyjnie element tego samego typu danych. A C++ tablica ma stały rozmiar.
Tablicę można postrzegać jako zbiór zmiennych o podobnym typie danych. Zamiast deklarować każdą zmienną i przypisywać jej wartość indywidualnie, możesz zadeklarować jedną zmienną (tablicę) i dodać do niej wartości różnych zmiennych. Każda wartość dodana do tablicy jest identyfikowana za pomocą indeksu.
Dlaczego potrzebujemy tablic?
Tablice są bardzo ważne w każdym języku programowania. Zapewniają wygodniejszy sposób przechowywania zmiennych lub zbioru danych podobnego typu razem, zamiast przechowywania ich osobno. Dostęp do każdej wartości tablicy będzie możliwy oddzielnie.
Zadeklaruj tablicę w C++
Deklaracja tablicy w C++ polega na określeniu typu i liczby elementów, które mają być przechowywane przez tablicę. Składnia:
type array-Name [ array-Size ];
Reguły deklarowania tablicy jednowymiarowej w C++.
- Typ: Typ to typ elementów, które mają być przechowywane w tablicy i musi być prawidłowy C++ typ danych.
- Nazwa tablicy: Nazwa-tablicy to nazwa, która ma zostać przypisana do tablicy.
- Rozmiar tablicy: Rozmiar tablicy to liczba elementów, które mają być przechowywane w tablicy. Musi to być liczba całkowita i większa niż 0.
Można na przykład utworzyć tablicę o nazwie wiek i przechowywać wiek 5 uczniów w następujący sposób:
int age[5];
Tablica age będzie przechowywać 5 liczb całkowitych reprezentujących wiek różnych uczniów.
Inicjalizacja tablicy
Inicjalizacja tablicy to proces przypisywania/przechowywania elementów do tablicy. Inicjalizacja może zostać przeprowadzona w pojedynczej instrukcji lub pojedynczo. Należy zauważyć, że pierwszy element tablicy jest przechowywany pod indeksem 0, natomiast ostatni element jest przechowywany pod indeksem n-1, gdzie n jest całkowitą liczbą elementów w tablicy.
W przypadku tablicy age pierwszy element będzie przechowywany pod indeksem 0, natomiast ostatni element będzie przechowywany pod indeksem 4.
Użyjmy tablicy age, aby zademonstrować, w jaki sposób można przeprowadzić inicjalizację tablicy:
int age[5] = {19, 18, 21, 20, 17};
Całkowita liczba elementów w { } nie może przekraczać wartości określonej w [ ]. Element 19 znajduje się pod indeksem 0, 18 pod indeksem 1, 21 pod indeksem 2, 20 pod indeksem 3, a 17 pod indeksem 4. Jeśli nie określisz liczby elementów, które mają być przechowywane w tablicy w [ ], tablica będzie wystarczająco duży, aby pomieścić elementy dodane w obrębie { }. Na przykład:
int age[] = {19, 18, 21, 20, 17};
Powyższa instrukcja utworzy dokładnie tę samą tablicę, co poprzednia. Można także przypisać jeden element do tablicy, korzystając z jej indeksu. Na przykład:
age[3] = 20;
Powyższa instrukcja zapisze wartość 20 pod indeksem 3 tablicy o nazwie wiek. Oznacza to, że 20 będzie 4th element tablicy.
Rodzaje tablic
Istnieją dwa typy C++ tablice:
- Jednowymiarowa tablica
- Tablica wielowymiarowa
- Wskaźnik do tablicy
Tablica jednowymiarowa
Jest to tablica, w której elementy danych są ułożone liniowo tylko w jednym wymiarze. Powszechnie nazywa się ją tablicą 1-D. Składnia:
datatype array-name[size];
- Nazwa-tablicy to nazwa tablicy.
- Rozmiar to liczba elementów, które mają być przechowywane w tablicy.
Na przykład:
#include <iostream> using namespace std; int main() { int age[5] = { 19, 18, 21, 20, 17 }; for (int x = 0; x < 5; x++) { cout <<age[x]<<"\n"; } }
Wyjście:
Oto zrzut ekranu kodu:
Code Wyjaśnienie:
- Dołącz plik nagłówkowy iostream do naszego kodu. Umożliwi nam to odczytywanie i zapisywanie na konsoli.
- Łącznie z przestrzenią nazw std, aby móc korzystać z jej klas i funkcji bez wywoływania jej.
- Wywołanie funkcji main(), wewnątrz której należy dodać logikę programu.
- Początek treści funkcji main().
- Deklarowanie tablicy o nazwie age do przechowywania 5 liczb całkowitych. Zainicjowano także 5 liczb całkowitych.
- Utwórz zmienną całkowitą x za pomocą pętli for.
- Początek treści pętli for.
- Użycie zmiennej pętli x do iteracji po wartościach tablicy age i wypisanie ich na konsoli. „\n” jest znakiem nowej linii i jest wypisywany w nowej linii po każdej iteracji.
- Koniec korpusu dla pętli.
- Koniec treści funkcji main().
Tablica wielowymiarowa
Jest to tablica, w której elementy danych są ułożone w celu utworzenia tablicy tablic. Tablica wielowymiarowa może mieć dowolną liczbę wymiarów, ale powszechne są tablice dwuwymiarowe i trójwymiarowe. Składnia:
datatype array-name[d1][d2][d3]...[dn];
Nazwa-tablicy to nazwa tablicy, która będzie miała n wymiarów. Na przykład:
Tablica dwuwymiarowa
Tablica 2D przechowuje dane na liście z tablicą 1-D. Jest to macierz z wierszami i kolumnami. Aby zadeklarować tablicę 2D, użyj następującej składni:
type array-Name [ x ][ y ];
Typ musi być prawidłowy C++ typ danych. Postrzegaj tablicę 2D jako tabelę, gdzie x oznacza liczbę wierszy, a y oznacza liczbę kolumn. Oznacza to, że każdy element tablicy 2D identyfikujesz za pomocą postaci a[x][y], gdzie x to numer wiersza, a y to liczba kolumn, do których należy dany element.
Oto przykład inicjowania tablicy 2D:
int a[2][3] = {
{0, 2, 1} , /* row at index 0 */
{4, 3, 7} , /* row at index 1 */
};
W powyższym przykładzie mamy tablicę 2D, którą można postrzegać jako macierz 2×3. Są 2 wiersze i 3 kolumny. Dostęp do elementu 0 można uzyskać jako [0] [1], ponieważ znajduje się on na przecięciu wiersza o indeksie 0 i kolumny o indeksie 1. Dostęp do elementu 3 można uzyskać jako [1] [2], ponieważ znajduje się on na przecięcie wiersza o indeksie 1 i kolumny o indeksie 2.
Zauważ, że po prostu dodaliśmy nawiasy klamrowe, aby rozróżnić różne rzędy elementów. Inicjalizacja mogła również zostać przeprowadzona w następujący sposób:
int a[2][3] = {0, 2, 1, 4, 3, 7};
};
Poniższy C++ przykład pokazuje jak zainicjować i przejść przez tablicę 2D:
#include <iostream> using namespace std; int main() { // a 2x3 array int a[3][2] = { {0, 2}, {1, 4}, {3, 7} }; // traverse array elements for (int i=0; i<3; i++) for (int j=0; j<2; j++) { cout << "a[" <<i<< "][" <<j<< "]: "; cout << a[i][j] << endl; } return 0; }
Wyjście:
Oto zrzut ekranu powyższego kodu:
Code Wyjaśnienie:
- Dołącz plik nagłówkowy iostream do naszego kodu. Umożliwi nam to odczytywanie i zapisywanie na konsoli.
- Łącznie z przestrzenią nazw std, aby móc korzystać z jej klas i funkcji bez wywoływania jej.
- Wywołanie funkcji main(), w ramach której należy dodać kod.
- Początek treści funkcji main().
- Komentarz. The C++ kompilator pominie to.
- Deklarowanie tablicy 2D składającej się z 3 wierszy i 2 kolumn. Do tablicy dodano także elementy.
- Komentarz. The C++ kompilator pominie to.
- Tworzenie zmiennej za pomocą pętli for. Ta zmienna będzie iterować po indeksach wierszy tablicy.
- Tworzenie zmiennej j za pomocą pętli for. Ta zmienna będzie iterować po indeksach kolumn tablicy.
- Początek treści pętli.
- Wydrukuj wartości zmiennych i i j na konsoli w nawiasach kwadratowych.
- Wydrukuj wartość przechowywaną pod indeksem [i] [j] tablicy a.
- Koniec korpusu pętli.
- Funkcja main() powinna zwrócić wartość całkowitą, jeśli program działa prawidłowo.
- Koniec treści funkcji main().
Tablica trójwymiarowa
Tablica 3D to tablica tablic. Każdy element tablicy 3D jest identyfikowany za pomocą zestawu 3 indeksów. Aby uzyskać dostęp do elementów tablicy 3D, używamy trzech pętli for. Na przykład:
#include<iostream> using namespace std; void main() { int a[2][3][2] = {{{4, 8},{2, 4},{1, 6}}, {{3, 6},{5, 4},{9, 3}}}; cout << "a[0][1][0] = " << a[0][1][0] << "\n"; cout << "a[0][1][1] = " << a[0][1][1] << "\n"; }
Wyjście:
Oto zrzut ekranu kodu:
Code Wyjaśnienie:
- Dołącz plik nagłówkowy iostream do naszego kodu. Umożliwi nam to odczytywanie i zapisywanie na konsoli.
- Łącznie z przestrzenią nazw std, aby móc korzystać z jej klas i funkcji bez wywoływania jej.
- Wywołanie funkcji main(), wewnątrz której należy dodać logikę programu.
- Początek treści funkcji main().
- Deklarowanie tablicy 3D o nazwie o rozmiarze 2x3x2. Wartości tablicy również zostały zainicjowane.
- Dostęp do elementu przechowywanego pod indeksem [0][1] [0] tablicy i wydrukowanie go na konsoli.
- Dostęp do elementu przechowywanego pod indeksem [0][1] [1] tablicy i wydrukowanie go na konsoli.
- Koniec treści funkcji main().
Wskaźnik do tablicy
A wskaźnik jest zmienną przechowującą adres. Oprócz używania wskaźnika do przechowywania adresu zmiennej, możemy go użyć do przechowywania adresu komórki tablicy. Nazwa tablicy stale wskazuje na jej pierwszy element. Rozważmy deklarację podaną poniżej:
int age[5];
Wiek jest wskaźnikiem do $age[0], adresu pierwszego elementu tablicy o nazwie age. Rozważmy następujący przykład:
#include <iostream> using namespace std; int main() { int *john; int age[5] = { 19, 18, 21, 20, 17 }; john = age; cout << john << "\n"; cout << *john; }
Wyjście:
Należy pamiętać, że pierwsza wartość powyższego wyniku może zwrócić inną wartość w zależności od adresu przypisanego do pierwszego elementu tablicy w pamięci komputera.
Oto zrzut ekranu kodu:
Code Wyjaśnienie:
- Dołącz plik nagłówkowy iostream do naszego kodu. Umożliwi nam to odczytywanie i zapisywanie na konsoli.
- Łącznie z przestrzenią nazw std, aby móc korzystać z jej klas i funkcji bez wywoływania jej.
- Wywołanie funkcji main(), wewnątrz której należy dodać logikę programu.
- Początek treści funkcji main().
- Deklarowanie zmiennej wskaźnikowej o nazwie *john.
- Deklarowanie tablicy liczb całkowitych o nazwie age do przechowywania 5 liczb całkowitych. Zainicjowano także wartości liczb całkowitych.
- Przypisanie zmiennej john wartości adresu elementu zapisanego w pierwszym indeksie tablicy age.
- Wypisanie wartości zmiennej john, która jest adresem elementu zapisanego w pierwszym indeksie tablicy age.
- Drukowanie pierwszej wartości zapisanej w tablicy age.
- Koniec treści funkcji main().
Nazwy tablic mogą być używane jako stałe wskaźniki i odwrotnie. Oznacza to, że możesz uzyskać dostęp do wartości przechowywanej w indeksie 3 tablicy age za pomocą *(wiek + 3). Na przykład:
#include <iostream> using namespace std; int main() { // an array of 5 elements. int age[5] = { 19, 18, 21, 20, 17 }; int *p; p = age; // output array values cout << "Using pointer: " << endl; for (int x=0; x<5; x++) { cout << "*(p + " << x << ") : "; cout << *(p + x) << endl; } cout << "Using age as address: " << endl; for (int x = 0; x < 5; x++) { cout << "*(age + " << x << ") : "; cout << *(age + x) << endl; } return 0; }
Wyjście:
Oto zrzut ekranu kodu:
Code Wyjaśnienie:
- Dołącz plik nagłówkowy iostream do naszego kodu. Umożliwi nam to odczytywanie i zapisywanie na konsoli.
- Łącznie z przestrzenią nazw std, aby móc korzystać z jej klas i funkcji bez wywoływania jej.
- Wywołanie funkcji main() i początek treści funkcji main().
- Komentarz. The C++ kompilator pominie to.
- Deklarowanie tablicy o nazwie age do przechowywania 5 liczb całkowitych.
- Tworzenie wskaźnika na liczbę całkowitą, s. 23
- Przypisanie p wartości adresu pierwszego elementu tablicy age.
- Komentarz. The C++ kompilator pominie to.
- Wydrukuj tekst na konsoli.
- Utwórz liczbę całkowitą x za pomocą pętli for. Znak { oznacza początek treści pętli for.
- Wydrukuj wartości x w połączeniu z innym tekstem na konsoli.
- Wydrukuj wartości *(p + x) na konsoli.
- Koniec ciała pętli for.
- Wydrukuj tekst na konsoli.
- Utwórz zmienną x za pomocą pętli for. Znak { oznacza początek treści pętli for.
- Wydrukuj wartości x od 0 do 4 wraz z innym tekstem.
- Wydrukuj wartości *(wiek + x).
- Koniec treści pętli for.
- Wartość zwracana, jeśli program działa pomyślnie.
- Koniec treści funkcji main().
Dostęp do wartości tablicy
Dostęp do elementów tablicy uzyskuje się za pomocą odpowiednich indeksów. Indeks elementu, do którego uzyskuje się dostęp, dodaje się w nawiasach kwadratowych [ ] bezpośrednio po nazwie tablicy. Na przykład:
int john = age[2];
W powyższym przykładzie po prostu stwierdzamy, że wiek Jana jest przechowywany pod indeksem 2 tablicy o nazwie wiek. Oznacza to, że wiek Jana to 3 latard wartość w tablicy age. Oto komplet C++ przykład pokazujący, jak uzyskać dostęp do tej wartości i ją wydrukować:
#include<iostream> using namespace std; int main() { int age[5] = { 19, 18, 21, 20, 17 }; int john = age[2]; cout << "The age of John is:"<<john; }
Wyjście:
Oto zrzut ekranu kodu:
Code Wyjaśnienie:
- Dołącz plik nagłówkowy iostream do naszego kodu. Umożliwi nam to odczytywanie i zapisywanie na konsoli.
- Łącznie z przestrzenią nazw std, aby móc korzystać z jej klas i funkcji bez wywoływania jej.
- Wywołanie funkcji main(), w ramach której należy dodać kod.
- Początek treści funkcji main().
- Deklarowanie tablicy o nazwie age do przechowywania 5 elementów całkowitych.
- Dostęp do wartości przechowywanej w indeksie 2 tablicy age i zapisywanie jej wartości w zmiennej o nazwie john.
- Drukowanie wartości zmiennej john na konsoli wraz z innym tekstem.
Zalety tablicy w C++
Oto zalety/korzyści korzystania z Array in C++:
- Elementy tablicy można łatwo przechodzić.
- Łatwe manipulowanie danymi tablicowymi.
- Dostęp do elementów tablicy można uzyskać losowo.
- Tablice ułatwiają optymalizację kodu; w związku z tym możemy wykonać dużo pracy przy użyciu mniejszej ilości kodu.
- Łatwe sortowanie danych tablicowych.
Wady tablicy w C++
- Tablica ma stały rozmiar; dlatego nie możemy dodawać do niego nowych elementów po inicjalizacji.
- Przydzielanie większej ilości pamięci niż jest to wymagane prowadzi do marnowania miejsca w pamięci, a mniejsza alokacja pamięci może powodować problemy.
- Liczba elementów, które mają być przechowywane w tablicy, musi być znana z góry.












