Pole v C++ | Prohlásit | Inicializovat | Příklady ukazatele na pole
Co je pole?
Pole je datová struktura, která postupně ukládá prvek stejného datového typu. A C++ pole má pevnou velikost.
Pole můžete vidět jako kolekci proměnných podobného datového typu. Místo toho, abyste deklarovali každou proměnnou a přiřazovali jí hodnotu jednotlivě, můžete deklarovat jednu proměnnou (pole) a přidat k ní hodnoty různých proměnných. Každá přidaná hodnota do pole je identifikována indexem.
Proč potřebujeme pole?
Pole jsou velmi důležité v jakémkoli programovacím jazyce. Poskytují pohodlnější způsob ukládání proměnných nebo kolekce dat podobného datového typu dohromady namísto jejich samostatného ukládání. Ke každé hodnotě pole bude přistupováno samostatně.
Deklarujte pole v C++
Deklarace pole v C++ zahrnuje uvedení typu a počtu prvků, které má pole uložit. Syntax:
type array-Name [ array-Size ];
Pravidla pro deklaraci jednorozměrného pole v C++.
- Typ: Typ je typ prvků, které mají být uloženy v poli, a musí být platný C++ datový typ.
- Název pole: Název pole je název, který má být poli přiřazen.
- Velikost pole: Pole-Size je počet prvků, které mají být uloženy v poli. Musí to být celé číslo a větší než 0.
Můžete například vytvořit pole s názvem věk a uložit věk 5 studentů následovně:
int age[5];
Věk pole bude ukládat 5 celých čísel představujících věk různých studentů.
Inicializace pole
Inicializace pole je proces přiřazování/ukládání prvků do pole. Inicializaci lze provést v jediném příkazu nebo po jednom. Všimněte si, že první prvek v poli je uložen na indexu 0, zatímco poslední prvek je uložen na indexu n-1, kde n je celkový počet prvků v poli.
V případě věkového pole bude první prvek uložen na indexu 0, zatímco poslední prvek bude uložen na indexu 4.
Použijme věkové pole k demonstraci toho, jak lze provést inicializaci pole:
int age[5] = {19, 18, 21, 20, 17};
Celkový počet prvků v { } nesmí překročit hodnotu uvedenou v [ ]. Prvek 19 je na indexu 0, 18 na indexu 1, 21 na indexu 2, 20 na indexu 3 a 17 na indexu 4. Pokud neuvedete počet prvků, které mají být uloženy v poli v rámci [ ], pole bude pouze dostatečně velký, aby pojal prvky přidané v { }. Například:
int age[] = {19, 18, 21, 20, 17};
Výše uvedený příkaz vytvoří přesně stejné pole jako předchozí. Pole můžete také přiřadit jeden prvek pomocí jeho indexu. Například:
age[3] = 20;
Výše uvedený příkaz uloží hodnotu 20 na index 3 pole s názvem age. To znamená, že 20 bude 4th prvek pole.
Druhy polí
K dispozici jsou dva typy C++ pole:
- Jednorozměrné pole
- Vícerozměrné pole
- Ukazatel na pole
Jednorozměrné pole
Jedná se o pole, ve kterém jsou datové položky uspořádány lineárně pouze v jednom rozměru. Běžně se nazývá 1-D pole. Syntax:
datatype array-name[size];
- Název pole je název pole.
- Velikost je počet položek, které mají být uloženy v poli.
Například:
#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";
}
}
Výstup:
Zde je snímek obrazovky kódu:
Vysvětlení kódu:
- Včetně souboru záhlaví iostream v našem kódu. Umožní nám to číst a zapisovat do konzole.
- Včetně jmenného prostoru std, aby bylo možné používat jeho třídy a funkce bez jeho volání.
- Volání funkce main(), do které má být přidána logika programu.
- Začátek těla funkce main().
- Deklarování pole s názvem age pro uložení 5 celých čísel. 5 celých čísel bylo také inicializováno.
- Vytvořte celočíselnou proměnnou x pomocí cyklu for.
- Začátek těla cyklu for.
- Pomocí proměnné smyčky x iterujte hodnoty stáří pole a vytiskněte je na konzole. „\n“ je znak nového řádku a po každé iteraci se vytiskne na nový řádek.
- Konec těla pro smyčku.
- Konec těla funkce main().
Vícerozměrné pole
Toto je pole, ve kterém jsou datové položky uspořádány tak, aby tvořily pole polí. Vícerozměrné pole může mít libovolný počet rozměrů, ale běžná jsou dvourozměrná a trojrozměrná pole. Syntax:
datatype array-name[d1][d2][d3]...[dn];
Název pole je název pole, které bude mít n rozměrů. Například:
Dvourozměrné pole
2D pole ukládá data do seznamu s 1-D polem. Je to matice s řádky a sloupci. Chcete-li deklarovat 2D pole, použijte následující syntaxi:
type array-Name [ x ][ y ];
Typ musí být platný C++ datový typ. Podívejte se na 2D pole jako na tabulku, kde x označuje počet řádků, zatímco y označuje počet sloupců. To znamená, že každý prvek ve 2D poli identifikujete pomocí tvaru a[x][y], kde x je počet řádků a y počet sloupců, do kterých prvek patří.
Zde je příklad, jak inicializovat 2D pole:
int a[2][3] = {
{0, 2, 1} , /* row at index 0 */
{4, 3, 7} , /* row at index 1 */
};
Ve výše uvedeném příkladu máme 2D pole, které lze vidět jako matici 2×3. K dispozici jsou 2 řádky a 3 sloupce. K prvku 0 lze přistupovat jako [0][1], protože se nachází na průsečíku řádku indexovaného 0 a sloupce indexovaného 1. K prvku 3 lze přistupovat jako [1][2], protože je umístěn na průsečík řádku indexovaného 1 a sloupce indexovaného 2.
Všimněte si, že jsme jednoduše přidali složené závorky, abychom odlišili různé řady prvků. Inicializace mohla být provedena také následovně:
int a[2][3] = {0, 2, 1, 4, 3, 7};
};
Následující C++ příklad ukazuje, jak inicializovat a procházet 2D pole:
#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;
}
Výstup:
Zde je snímek obrazovky výše uvedeného kódu:
Vysvětlení kódu:
- Včetně souboru záhlaví iostream v našem kódu. Umožní nám to číst a zapisovat do konzole.
- Včetně jmenného prostoru std, aby bylo možné používat jeho třídy a funkce bez jeho volání.
- Volání funkce main(), do které by měl být přidán kód.
- Začátek těla funkce main().
- Komentář. The C++ kompilátor toto přeskočí.
- Deklarace 2D pole 3 řádků a 2 sloupců. Do pole byly také přidány položky.
- Komentář. The C++ kompilátor toto přeskočí.
- Vytvoření proměnné i pomocí cyklu for. Tato proměnná bude iterovat přes indexy řádků pole.
- Vytvoření proměnné j pomocí cyklu a for. Tato proměnná bude iterovat přes indexy sloupců pole.
- Začátek těla smyček.
- Vytiskněte hodnoty proměnných i a j na konzole do hranatých závorek na konzole.
- Vytiskněte hodnotu uloženou v indexu [i][j] pole a.
- Konec těla smyček.
- Funkce main() by měla vrátit celočíselnou hodnotu, pokud program běží správně.
- Konec těla funkce main().
Třírozměrné pole
3D pole je pole polí. Každý prvek v 3D poli je identifikován sadou 3 indexů. Pro přístup k prvkům 3D pole používáme tři smyčky for. Například:
#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";
}
Výstup:
Zde je snímek obrazovky kódu:
Vysvětlení kódu:
- Včetně souboru záhlaví iostream v našem kódu. Umožní nám to číst a zapisovat do konzole.
- Včetně jmenného prostoru std, aby bylo možné používat jeho třídy a funkce bez jeho volání.
- Volání funkce main(), do které má být přidána logika programu.
- Začátek těla funkce main().
- Deklarace 3D pole s názvem an o velikosti 2x3x2. Hodnoty pole byly také inicializovány.
- Přístup k položce uložené na indexu [0][1][0] pole a její tisk na konzole.
- Přístup k položce uložené na indexu [0][1][1] pole a její tisk na konzole.
- Konec těla funkce main().
Ukazatel na pole
A ukazatel je proměnná, která obsahuje adresu. Kromě použití ukazatele k uložení adresy proměnné jej můžeme použít k uložení adresy buňky pole. Název pole neustále ukazuje na jeho první prvek. Zvažte níže uvedené prohlášení:
int age[5];
Věk je ukazatel na $age[0], adresu prvního prvku pole s názvem age. Zvažte následující příklad:
#include <iostream>
using namespace std;
int main()
{
int *john;
int age[5] = { 19, 18, 21, 20, 17 };
john = age;
cout << john << "\n";
cout << *john;
}
Výstup:
Všimněte si, že první hodnota výše uvedeného výstupu může vrátit jinou hodnotu v závislosti na adrese přiřazené prvnímu prvku pole v paměti vašeho počítače.
Zde je snímek obrazovky kódu:
Vysvětlení kódu:
- Včetně souboru záhlaví iostream v našem kódu. Umožní nám to číst a zapisovat do konzole.
- Včetně jmenného prostoru std, aby bylo možné používat jeho třídy a funkce bez jeho volání.
- Volání funkce main(), do které má být přidána logika programu.
- Začátek těla funkce main().
- Deklarování proměnné ukazatele s názvem *john.
- Deklarování celočíselného pole s názvem age pro uložení 5 celých čísel. Hodnoty celých čísel byly také inicializovány.
- Přiřazení proměnné john hodnotu adresy položky uložené v prvním indexu stáří pole.
- Tisk hodnoty proměnné john, což je adresa položky uložené v prvním indexu stáří pole.
- Tisk první hodnoty uložené ve stáří pole.
- Konec těla funkce main().
Názvy polí lze použít jako konstantní ukazatele a platí to i naopak. To znamená, že můžete přistupovat k hodnotě uložené na indexu 3 stáří pole s *(věk + 3). Například:
#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;
}
Výstup:
Zde je snímek obrazovky kódu:
Vysvětlení kódu:
- Včetně souboru záhlaví iostream v našem kódu. Umožní nám to číst a zapisovat do konzole.
- Včetně jmenného prostoru std, aby bylo možné používat jeho třídy a funkce bez jeho volání.
- Volání funkce main() a začátek těla funkce main().
- Komentář. The C++ kompilátor toto přeskočí.
- Deklarování pole s názvem age pro uložení 5 celých čísel.
- Vytvoření celočíselného ukazatele p.
- Přiřazení p hodnotu adresy prvního prvku stáří pole.
- Komentář. The C++ kompilátor toto přeskočí.
- Vytiskněte nějaký text na konzoli.
- Vytvořte celé číslo x pomocí cyklu a. { označuje začátek těla cyklu for.
- Vytiskněte hodnoty x kombinované s nějakým dalším textem na konzole.
- Vytiskněte hodnoty *(p + x) na konzole.
- Konec těla smyčky for.
- Vytiskněte nějaký text na konzoli.
- Vytvořte proměnnou x pomocí cyklu for. { označuje začátek těla cyklu for.
- Vytiskněte hodnoty x od 0 do 4 spolu s jiným textem.
- Vytiskněte hodnoty *(věk + x).
- Konec těla smyčky for.
- Návratová hodnota, pokud program běží úspěšně.
- Konec těla funkce main().
Přístup k hodnotám pole
K prvkům pole se přistupuje pomocí jejich příslušných indexů. Index prvku, ke kterému se má přistupovat, je přidán do hranatých závorek [ ] bezprostředně za název pole. Například:
int john = age[2];
Ve výše uvedeném příkladu jednoduše říkáme, že Johnův věk je uložen na indexu 2 pole s názvem věk. To znamená, že Johnův věk je 3rd hodnotu ve stáří pole. Zde je kompletní C++ příklad, který ukazuje, jak získat a vytisknout tuto hodnotu:
#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;
}
Výstup:
Zde je snímek obrazovky kódu:
Vysvětlení kódu:
- Včetně souboru záhlaví iostream v našem kódu. Umožní nám to číst a zapisovat do konzole.
- Včetně jmenného prostoru std, aby bylo možné používat jeho třídy a funkce bez jeho volání.
- Volání funkce main(), do které by měl být přidán kód.
- Začátek těla funkce main().
- Deklarace pole s názvem age pro uložení 5 celočíselných prvků.
- Přístup k hodnotě uložené na indexu 2 stáří pole a uložení její hodnoty do proměnné s názvem john.
- Tisk hodnoty proměnné john na konzole spolu s jiným textem.
Výhody Array in C++
Zde jsou výhody/výhody použití Array v C++:
- Prvky pole lze snadno procházet.
- Snadná manipulace s daty pole.
- K prvkům pole lze přistupovat náhodně.
- Pole usnadňují optimalizaci kódu; můžeme tedy provést mnoho práce s použitím menšího množství kódu.
- Snadné třídění dat pole.
Nevýhody Array in C++
- Pole má pevnou velikost; proto do něj po inicializaci nemůžeme přidávat nové prvky.
- Přidělení více paměti, než je požadavek, vede k plýtvání paměťovým prostorem a menší alokace paměti může způsobit problém.
- Počet prvků, které mají být uloženy v poli, musí být znám předem.
Shrnutí
- Pole je datová struktura, která ukládá prvky stejného datového typu.
- Prvky pole se ukládají postupně.
- Prvky pole jsou označeny pomocí jejich příslušných indexů. První prvek je na indexu 0, zatímco poslední prvek je na indexu n-1, kde je celkový počet prvků pole.
- Deklarace pole zahrnuje definování datových typů prvků pole a také počtu prvků, které mají být v poli uloženy.
- Jednorozměrné pole ukládá prvky postupně.
- Dvourozměrné pole ukládá prvky do řádků a sloupců.
- Trojrozměrné pole je pole polí.
- Prvky lze přidat do pole pomocí jejich indexů.
- K prvkům pole se přistupuje pomocí jejich indexů.
- Vícerozměrné pole má více než jeden rozměr.
- Název pole ukazuje na jeho první prvek.
- Pole mají pevnou velikost, což znamená, že do pole nelze po jeho inicializaci přidávat nové prvky.











