Massiivid sisse C++Deklareerimine, initsialiseerimine ja pointerid (näited)
⚡ Nutikas kokkuvõte
Massiiv sees C++ on sama andmetüübi elementide kogum, mis on salvestatud külgnevates mälupesades. Siin õpid massiive deklareerima, initsialiseerima ja neile juurde pääsema, massiivide tüüpe ning nende eeliseid ja puudusi.

Mis on massiiv?
Massiiv on andmestruktuur, mis salvestab järjestikku sama andmetüübi elemendi. A C++ massiiv on fikseeritud suurusega.
Saate näha massiivi sarnase andmetüübi muutujate kogumina. Selle asemel, et deklareerida iga muutuja ja määrata sellele väärtus eraldi, saate deklareerida ühe muutuja (massiivi) ja lisada sellele erinevate muutujate väärtused. Iga massiivile lisatud väärtus on identifitseeritud indeksiga.
Miks me vajame massiive?
Massiraadid on igas programmeerimiskeeles väga olulised. Need pakuvad mugavamat viisi muutujate või sarnast tüüpi andmete kogumite koos salvestamiseks, selle asemel et neid eraldi salvestada. Igale massiivi väärtusele pääseb juurde eraldi.
Deklareerige massiiv sisse C++
Massiivi deklaratsioon sisse C++ hõlmab massiivi salvestatavate elementide tüübi ja arvu määramist. Süntaks:
type array-Name [ array-Size ];
Ühemõõtmelise massiivi deklareerimise reeglid C++.
- Type: Tüüp on massiivi salvestatavate elementide tüüp ja see peab olema kehtiv C++ andmetüüp.
- Massiivi nimi: Massiivi nimi on massiivile omistatav nimi.
- Massiivi suurus: Massiivi suurus on massiivi salvestatavate elementide arv. See peab olema täisarv ja suurem kui 0.
Näiteks saate luua massiivi nimega vanus ja salvestada 5 õpilase vanused järgmiselt:
int age[5];
Massiivi vanus salvestab 5 täisarvu, mis esindavad erinevate õpilaste vanust.
Massiivi initsialiseerimine
Massiivi initsialiseerimine on massiivi elementide määramise/salvestamise protsess. Initsialiseerimist saab teha ühe lausega või ükshaaval. Pange tähele, et massiivi esimene element on salvestatud indeksisse 0, viimane element aga indeksisse n-1, kus n on massiivi elementide koguarv.
Vanuse massiivi puhul salvestatakse esimene element indeksisse 0, viimane element aga indeksisse 4.
Kasutagem vanuse massiivi, et näidata, kuidas massiivi initsialiseerida saab:
int age[5] = {19, 18, 21, 20, 17};
Elementide koguarv jaotises { } ei tohi ületada lahtris [ ] märgitud väärtust. Element 19 on indeksis 0, 18 indeksis 1, 21 indeksis 2, 20 indeksis 3 ja 17 indeksis 4. Kui te ei määra massiivi salvestatavate elementide arvu [ ] piires, siis massiiv on ainult piisavalt suur, et mahutada sisse { } lisatud elemente. Näiteks:
int age[] = {19, 18, 21, 20, 17};
Ülaltoodud lause loob täpselt sama massiivi, mis eelmine. Samuti saate massiivile selle indeksi abil ühe elemendi määrata. Näiteks:
age[3] = 20;
Ülaltoodud lause salvestab väärtuse 20 massiivi nimega age indeksisse 3. See tähendab, et 20 on 4th massiivi element.
Massiivide tüübid
On kahte tüüpi C++ massiivid:
- Ühemõõtmeline massiiv
- Mitmemõõtmeline massiiv
- Osuti massiivile
Ühemõõtmeline massiiv
See on massiiv, milles andmeüksused on paigutatud lineaarselt ainult ühes mõõtmes. Seda nimetatakse tavaliselt 1-D massiiviks. Süntaks:
datatype array-name[size];
- Massiivi nimi on massiivi nimi.
- Suurus on massiivi salvestatavate üksuste arv.
Näiteks:
#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äljund:
Siin on koodi ekraanipilt:
Code Selgitus:
- Kaasa arvatud iostreami päisefail meie koodis. See võimaldab meil konsoolist lugeda ja sinna kirjutada.
- Kaasa arvatud std-nimeruum, et kasutada selle klasse ja funktsioone ilma seda kutsumata.
- Main() funktsiooni kutsumine, mille sees tuleks lisada programmi loogika.
- Funktsiooni main() keha algus.
- Vanuse-nimelise massiivi deklareerimine 5 täisarvu salvestamiseks. 5 täisarvu on samuti lähtestatud.
- Looge for-tsükli abil täisarvuline muutuja x.
- For-silmuse keha algus.
- Silmusmuutuja x kasutamine massiivi vanuse väärtuste kordamiseks ja nende konsoolile printimiseks. "\n" on reavahetusmärk ja prinditakse pärast iga iteratsiooni uuele reale.
- Keha lõpp silmuse jaoks.
- Funktsiooni main() keha lõpp.
Mitmemõõtmeline massiiv
See on massiiv, milles andmeüksused on paigutatud massiivideks. Mitmemõõtmelisel massiivil võib olla suvaline arv mõõtmeid, kuid tavalised on kahe- ja kolmemõõtmelised massiivid. Süntaks:
datatype array-name[d1][d2][d3]...[dn];
Massiivi nimi on massiivi nimi, millel on n suurust. Näiteks:
Kahemõõtmeline massiiv
2D massiiv salvestab andmed 1-D massiiviga loendisse. See on ridade ja veergudega maatriks. 2D-massiivi deklareerimiseks kasutage järgmist süntaksit:
type array-Name [ x ][ y ];
Tüüp peab olema kehtiv C++ andmetüüp. Vaadake 2D-massiivi tabelina, kus x tähistab ridade arvu, y aga veergude arvu. See tähendab, et identifitseerite iga elemendi 2D-massiivis, kasutades vormi a[x][y], kus x on rea arv ja y veergude arv, kuhu element kuulub.
Siin on näide 2D-massiivi lähtestamise kohta:
int a[2][3] = {
{0, 2, 1} , /* row at index 0 */
{4, 3, 7} , /* row at index 1 */
};
Ülaltoodud näites on meil 2D massiiv, mida saab vaadelda 2 × 3 maatriksina. Seal on 2 rida ja 3 veergu. Elemendile 0 pääseb juurde kui [0][1], kuna see asub rea indeksiga 0 ja veeru indeksiga 1 ristumiskohas. Elemendile 3 pääseb juurde kui [1][2], kuna see asub 1. indekseeritud rea ja 2. veeru ristumiskoht.
Pange tähele, et lisasime lihtsalt lokkis traksid, et eristada erinevaid elemendiridu. Initsialiseerimise oleks võinud teha ka järgmiselt:
int a[2][3] = {0, 2, 1, 4, 3, 7};
};
Järgmised C++ Näide näitab, kuidas 2D-massiivi lähtestada ja läbida:
#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äljund:
Siin on ülaltoodud koodi ekraanipilt:
Code Selgitus:
- Kaasa arvatud iostreami päisefail meie koodis. See võimaldab meil konsoolist lugeda ja sinna kirjutada.
- Kaasa arvatud std-nimeruum, et kasutada selle klasse ja funktsioone ilma seda kutsumata.
- Funktsiooni main() kutsumine, mille sees kood tuleks lisada.
- Funktsiooni main() keha algus.
- Kommentaar. The C++ kompilaator jätab selle vahele.
- 2 reast ja 3 veerust koosneva 2D massiivi deklareerimine. Massiivi on lisatud ka üksusi.
- Kommentaar. The C++ kompilaator jätab selle vahele.
- Muutuja i loomine tsükli a abil. See muutuja kordab massiivi ridade indekseid.
- Muutuja j loomine tsükli a abil. See muutuja kordab üle massiivi veeruindeksite.
- Silmuste keha algus.
- Printige konsooli muutujate i ja j väärtused konsooli nurksulgudesse.
- Printige välja massiivi a indeksisse [i][j] salvestatud väärtus.
- Silmuste korpuse ots.
- Funktsioon main() peaks tagastama täisarvu, kui programm töötab hästi.
- Funktsiooni main() keha lõpp.
Kolmemõõtmeline massiiv
3D massiiv on massiivi massiiv. 3D-massiivi iga elementi identifitseerib 3 indeksist koosnev komplekt. 3D-massiivi elementidele juurdepääsuks kasutame kolme silmust. Näiteks:
#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äljund:
Siin on koodi ekraanipilt:
Code Selgitus:
- Kaasa arvatud iostreami päisefail meie koodis. See võimaldab meil konsoolist lugeda ja sinna kirjutada.
- Kaasa arvatud std-nimeruum, et kasutada selle klasse ja funktsioone ilma seda kutsumata.
- Main() funktsiooni kutsumine, mille sees tuleks lisada programmi loogika.
- Funktsiooni main() keha algus.
- 3D-massiivi an, mille suurus on 2x3x2, deklareerimine. Ka massiivi väärtused on lähtestatud.
- Juurdepääs massiivi indeksisse [0][1][0] talletatud üksusele ja selle printimine konsoolile.
- Juurdepääs massiivi indeksisse [0][1][1] talletatud üksusele ja selle printimine konsoolile.
- Funktsiooni main() keha lõpp.
Osuti massiivile
A pointer on muutuja, mis sisaldab aadressi. Lisaks osuti kasutamisele muutuja aadressi salvestamiseks, saame seda kasutada ka massiivi lahtri aadressi salvestamiseks. Massiivi nimi osutab pidevalt selle esimesele elemendile. Mõelge allpool esitatud deklaratsioonile:
int age[5];
Vanus on osuti $age[0]-le, mis on massiivi nimega age esimese elemendi aadress. Kaaluge järgmist näidet:
#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äljund:
Pange tähele, et ülaltoodud väljundi esimene väärtus võib tagastada erineva väärtuse olenevalt teie arvuti mälus oleva massiivi esimesele elemendile määratud aadressist.
Siin on koodi ekraanipilt:
Code Selgitus:
- Kaasa arvatud iostreami päisefail meie koodis. See võimaldab meil konsoolist lugeda ja sinna kirjutada.
- Kaasa arvatud std-nimeruum, et kasutada selle klasse ja funktsioone ilma seda kutsumata.
- Main() funktsiooni kutsumine, mille sees tuleks lisada programmi loogika.
- Funktsiooni main() keha algus.
- Osutimuutuja nimega *john deklareerimine.
- Täisarvu massiivi nimega vanus deklareerimine 5 täisarvu salvestamiseks. Initsialiseeritud on ka täisarvude väärtused.
- Muutujale john massiivi vanuse esimesse indeksisse salvestatud üksuse aadressi väärtuse määramine.
- Muutuja john väärtuse trükkimine, mis on massiivi vanuse esimesse indeksisse salvestatud üksuse aadress.
- Massiivi vanusesse salvestatud esimese väärtuse trükkimine.
- Funktsiooni main() keha lõpp.
Massiivinimesid saab kasutada konstantsete näpunäidetena ja ka vastupidi. See tähendab, et pääsete juurde massiivi vanuse indeksisse 3 salvestatud väärtusele *(vanus + 3). Näiteks:
#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äljund:
Siin on koodi ekraanipilt:
Code Selgitus:
- Kaasa arvatud iostreami päisefail meie koodis. See võimaldab meil konsoolist lugeda ja sinna kirjutada.
- Kaasa arvatud std-nimeruum, et kasutada selle klasse ja funktsioone ilma seda kutsumata.
- Funktsiooni main() kutsumine ja funktsiooni main() keha algus.
- Kommentaar. The C++ kompilaator jätab selle vahele.
- Vanuse-nimelise massiivi deklareerimine 5 täisarvu salvestamiseks.
- Täisarvu osuti loomine lk.
- Massiivi vanuse esimese elemendi aadressi väärtuse p omistamine.
- Kommentaar. The C++ kompilaator jätab selle vahele.
- Printige konsoolil välja tekst.
- Looge täisarv x, kasutades a for tsüklit. { märgib for tsükli keha algust.
- Printige välja x väärtused koos mõne muu konsooli tekstiga.
- Printige konsoolil välja *(p + x) väärtused.
- For silmuse keha lõpp.
- Printige konsoolil välja tekst.
- Loo muutuja x, kasutades a for tsüklit. { märgib for-tsükli keha algust.
- Printige välja x väärtused vahemikus 0 kuni 4 koos mõne muu tekstiga.
- Printige välja *(vanus + x) väärtused.
- For-silmuse keha lõpp.
- Tagastab väärtuse, kui programm töötab edukalt.
- Funktsiooni main() keha lõpp.
Juurdepääs massiivi väärtustele
Massiivi elementidele pääseb juurde nende vastavate indeksite abil. Juurdepääsetava elemendi indeks lisatakse nurksulgudesse [ ] kohe massiivi nime järele. Näiteks:
int john = age[2];
Ülaltoodud näites väidame lihtsalt, et Johni vanus on salvestatud vanusenimelise massiivi indeksisse 2. See tähendab, et Johni vanus on 3rd väärtus massiivi vanuses. Siin on täielik C++ näide, mis näitab, kuidas sellele väärtusele juurde pääseda ja selle välja printida:
#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äljund:
Siin on koodi ekraanipilt:
Code Selgitus:
- Kaasa arvatud iostreami päisefail meie koodis. See võimaldab meil konsoolist lugeda ja sinna kirjutada.
- Kaasa arvatud std-nimeruum, et kasutada selle klasse ja funktsioone ilma seda kutsumata.
- Funktsiooni main() kutsumine, mille sees kood tuleks lisada.
- Funktsiooni main() keha algus.
- Vanuse-nimelise massiivi deklareerimine 5 täisarvulise elemendi salvestamiseks.
- Juurdepääs massiivi vanuse indeksisse 2 talletatud väärtusele ja selle väärtuse salvestamine muutujasse nimega john.
- Muutuja john väärtuse trükkimine konsoolil koos muu tekstiga.
Massiivi eelised C++
Siin on massiivi kasutamise plussid / eelised C++:
- Massiivi elemente saab hõlpsasti läbida.
- Massiiviandmetega lihtne manipuleerida.
- Massiivi elementidele pääseb juurde juhuslikult.
- Massiivid hõlbustavad koodi optimeerimist; seega saame teha palju tööd, kasutades vähem koodi.
- Lihtne sortida massiivi andmeid.
Massiivi puudused C++
- Massiivil on fikseeritud suurus; seega ei saa me sellele pärast initsialiseerimist uusi elemente lisada.
- Nõutavast suurema mälu eraldamine põhjustab mäluruumi raiskamist ja väiksem mälu eraldamine võib tekitada probleeme.
- Massiivi salvestatavate elementide arv peab olema eelnevalt teada.











