Масиви в C++ | Декларирайте | Инициализиране | Примери за указател към масив
Какво е масив?
Масивът е структура от данни, която съхранява елемент от същия тип данни последователно. А C++ масивът е с фиксиран размер.
Можете да видите масив като колекция от променливи от подобен тип данни. Вместо да декларирате всяка променлива и да й присвоявате стойност поотделно, можете да декларирате една променлива (масива) и да добавите стойностите на различните променливи към нея. Всяка добавена стойност към масива се идентифицира с индекс.
Защо се нуждаем от масиви?
Масивите са много важни във всеки език за програмиране. Те предоставят по-удобен начин за съхраняване на променливи или колекция от данни от подобен тип данни заедно, вместо да ги съхранявате отделно. Всяка стойност на масива ще бъде достъпна отделно.
Декларирайте масив в C++
Декларация на масив в C++ включва посочване на типа, както и броя на елементите, които да се съхраняват от масива. Синтаксис:
type array-Name [ array-Size ];
Правила за деклариране на едномерен масив в C++.
- Тип: Типът е типът на елементите, които ще се съхраняват в масива, и трябва да е валиден C++ тип данни.
- Име на масив: Името на масива е името, което трябва да бъде присвоено на масива.
- Размер на масива: Размерът на масива е броят на елементите, които трябва да бъдат съхранени в масива. Трябва да е цяло число и по-голямо от 0.
Например, можете да създадете масив с име age и да съхранявате възрастта на 5 ученика, както следва:
int age[5];
Възрастта на масива ще съхранява 5 цели числа, представляващи възрастта на различни ученици.
Инициализация на масив
Инициализацията на масив е процес на присвояване/съхраняване на елементи към масив. Инициализирането може да се извърши в един оператор или един по един. Обърнете внимание, че първият елемент в масива се съхранява с индекс 0, докато последният елемент се съхранява с индекс n-1, където n е общият брой елементи в масива.
В случая на възрастовия масив, първият елемент ще се съхранява при индекс 0, докато последният елемент ще се съхранява при индекс 4.
Нека използваме масива age, за да демонстрираме как може да се направи инициализация на масива:
int age[5] = {19, 18, 21, 20, 17};
Общият брой елементи в {} не може да надвишава стойността, посочена в []. Елементът 19 е с индекс 0, 18 с индекс 1, 21 с индекс 2, 20 с индекс 3 и 17 с индекс 4. Ако не посочите броя на елементите, които да се съхраняват в масива в [ ], масивът ще бъде само достатъчно голям, за да побере елементите, добавени в { }. Например:
int age[] = {19, 18, 21, 20, 17};
Горният оператор ще създаде абсолютно същия масив като предишния. Можете също да присвоите един елемент към масив, като използвате неговия индекс. Например:
age[3] = 20;
Горният израз ще съхрани стойността 20 при индекс 3 на масива с име възраст. Това означава, че 20 ще бъде 4th елемент от масива.
Видове масиви
Има два вида C++ масиви:
- Едномерен масив
- Многоизмерен масив
- Указател към масив
Едномерен масив
Това е масив, в който елементите от данни са подредени линейно само в едно измерение. Обикновено се нарича 1-D масив. Синтаксис:
datatype array-name[size];
- Името на масива е името на масива.
- Размерът е броят елементи, които трябва да се съхранят в масива.
Например:
#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";
}
}
Изход:
Ето екранна снимка на кода:
Code Обяснение:
- Включване на заглавния файл на iostream в нашия код. Това ще ни позволи да четем от и да пишем в конзолата.
- Включва пространството от имена std, за да използва неговите класове и функции, без да го извиква.
- Извикване на функцията main(), в която трябва да се добави логиката на програмата.
- Начало на тялото на функцията main().
- Деклариране на масив с име age за съхраняване на 5 цели числа. 5-те цели числа също са инициализирани.
- Създайте целочислена променлива x с помощта на for цикъл.
- Началото на тялото на for цикъла.
- Използване на променливата на цикъла x за итериране на стойностите на възрастта на масива и отпечатването им на конзолата. „\n“ е знак за нов ред и се отпечатва на нов ред след всяка итерация.
- Краят на тялото на за цикъл.
- Край на тялото на функцията main().
Многоизмерен масив
Това е масив, в който елементите от данни са подредени, за да образуват масив от масиви. Многоизмерният масив може да има произволен брой измерения, но двуизмерните и триизмерните масиви са често срещани. Синтаксис:
datatype array-name[d1][d2][d3]...[dn];
Името на масива е името на масива, който ще има n измерения. Например:
Двуизмерен масив
2D масив съхранява данни в списък с 1-D масив. Това е матрица с редове и колони. За да декларирате 2D масив, използвайте следния синтаксис:
type array-Name [ x ][ y ];
Типът трябва да е валиден C++ тип данни. Вижте 2D масив като таблица, където x означава броя на редовете, докато y означава броя на колоните. Това означава, че идентифицирате всеки елемент в 2D масив, като използвате формата a[x][y], където x е номерът на реда, а y броят на колоните, към които принадлежи елементът.
Ето пример за това как да инициализирате 2D масив:
int a[2][3] = {
{0, 2, 1} , /* row at index 0 */
{4, 3, 7} , /* row at index 1 */
};
В горния пример имаме 2D масив, който може да се разглежда като 2×3 матрица. Има 2 реда и 3 колони. Елементът 0 може да бъде достъпен като [0][1], защото се намира в пресечната точка на ред с индекс 0 и колона с индекс 1. Елементът 3 може да бъде достъпен като [1][2], защото се намира на пресечна точка на ред с индекс 1 и колона с индекс 2.
Имайте предвид, че просто добавихме фигурни скоби, за да разграничим различните редове от елементи. Инициализирането може да се извърши и по следния начин:
int a[2][3] = {0, 2, 1, 4, 3, 7};
};
По-долу C++ пример демонстрира как да инициализирате и преминете през 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;
}
Изход:
Ето екранна снимка на горния код:
Code Обяснение:
- Включване на заглавния файл на iostream в нашия код. Това ще ни позволи да четем от и да пишем в конзолата.
- Включва пространството от имена std, за да използва неговите класове и функции, без да го извиква.
- Извикване на функцията main(), в която трябва да се добави код.
- Начало на тялото на функцията main().
- Коментар. The C++ компилаторът ще пропусне това.
- Деклариране на 2D масив от 3 реда и 2 колони. Към масива са добавени и елементи.
- Коментар. The C++ компилаторът ще пропусне това.
- Създаване на променлива i с помощта на for цикъл. Тази променлива ще обхожда индексите на редовете на масива.
- Създаване на променлива j с помощта на for цикъл. Тази променлива ще обхожда индексите на колоните на масива.
- Начало на тялото на бримките.
- Отпечатайте стойностите на променливите i и j на конзолата в квадратни скоби на конзолата.
- Отпечатайте стойността, съхранена в индекс [i][j] на масива a.
- Край на тялото на бримките.
- Функцията main() трябва да върне цяло число, ако програмата работи добре.
- Край на тялото на функцията main().
Триизмерен масив
Триизмерният масив е масив от масиви. Всеки елемент в 3D масив се идентифицира чрез набор от 3 индекса. За достъп до елементите на 3D масив използваме три цикъла for. Например:
#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";
}
Изход:
Ето екранна снимка на кода:
Code Обяснение:
- Включване на заглавния файл на iostream в нашия код. Това ще ни позволи да четем от и да пишем в конзолата.
- Включва пространството от имена std, за да използва неговите класове и функции, без да го извиква.
- Извикване на функцията main(), в която трябва да се добави логиката на програмата.
- Начало на тялото на функцията main().
- Деклариране на 3D масив с име an с размер 2x3x2. Стойностите на масива също са инициализирани.
- Достъп до елемента, съхранен в индекс [0][1][0] на масива, и отпечатването му на конзолата.
- Достъп до елемента, съхранен в индекс [0][1][1] на масива, и отпечатването му на конзолата.
- Край на тялото на функцията main().
Указател към масив
A показалка е променлива, която съдържа адрес. Освен да използваме указател за съхраняване на адреса на променлива, можем да го използваме за съхраняване на адреса на клетка от масив. Името на масив постоянно сочи към първия му елемент. Разгледайте декларацията, дадена по-долу:
int age[5];
Възрастта е указател към $age[0], адреса на първия елемент от масив с име age. Разгледайте следния пример:
#include <iostream>
using namespace std;
int main()
{
int *john;
int age[5] = { 19, 18, 21, 20, 17 };
john = age;
cout << john << "\n";
cout << *john;
}
Изход:
Имайте предвид, че първата стойност на горния изход може да върне различна стойност в зависимост от адреса, присвоен на първия елемент от масива в паметта на вашия компютър.
Ето екранна снимка на кода:
Code Обяснение:
- Включване на заглавния файл на iostream в нашия код. Това ще ни позволи да четем от и да пишем в конзолата.
- Включва пространството от имена std, за да използва неговите класове и функции, без да го извиква.
- Извикване на функцията main(), в която трябва да се добави логиката на програмата.
- Начало на тялото на функцията main().
- Деклариране на указателна променлива с име *john.
- Деклариране на масив с цели числа с име age за съхраняване на 5 цели числа. Стойностите на целите числа също са инициализирани.
- Присвояване на променливата john на стойността на адреса на елемента, съхранен в първия индекс на масива age.
- Отпечатване на стойността на променливата john, която е адресът на елемента, съхранен в първия индекс на масива age.
- Отпечатване на първата стойност, съхранена в масива age.
- Край на тялото на функцията main().
Имената на масивите могат да се използват като постоянни указатели и обратното също е вярно. Това означава, че можете да получите достъп до стойността, съхранена в индекс 3 на масива възраст с *(възраст + 3). Например:
#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;
}
Изход:
Ето екранна снимка на кода:
Code Обяснение:
- Включване на заглавния файл на iostream в нашия код. Това ще ни позволи да четем от и да пишем в конзолата.
- Включва пространството от имена std, за да използва неговите класове и функции, без да го извиква.
- Извикване на функцията main() и начало на тялото на функцията main().
- Коментар. The C++ компилаторът ще пропусне това.
- Деклариране на масив с име age за съхраняване на 5 цели числа.
- Създаване на целочислен указател p.
- Присвояване на p стойността на адреса на първия елемент от възрастта на масива.
- Коментар. The C++ компилаторът ще пропусне това.
- Отпечатайте малко текст на конзолата.
- Създайте цяло число x с помощта на for цикъл. { маркира началото на тялото на for цикъла.
- Разпечатайте стойностите на x, комбинирани с някакъв друг текст на конзолата.
- Отпечатайте стойностите на *(p + x) на конзолата.
- Краят на тялото на for цикъла.
- Отпечатайте малко текст на конзолата.
- Създайте променлива x с помощта на for цикъл. { маркира началото на тялото на for цикъла.
- Отпечатайте стойностите на x от 0 до 4 заедно с друг текст.
- Разпечатайте стойностите на *(възраст + x).
- Край на тялото на for цикъла.
- Върната стойност, ако програмата работи успешно.
- Край на тялото на функцията main().
Достъп до стойностите на масив
Достъпът до елементите на масива се осъществява чрез съответните им индекси. Индексът на елемента, до който се осъществява достъп, се добавя в квадратни скоби [ ] непосредствено след името на масива. Например:
int john = age[2];
В горния пример ние просто заявяваме, че възрастта на john се съхранява в индекс 2 на масива с име age. Това означава, че възрастта на Джон е 3rd стойност в масива age. Ето един пълен C++ пример, който показва как да получите достъп и да отпечатате тази стойност:
#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;
}
Изход:
Ето екранна снимка на кода:
Code Обяснение:
- Включване на заглавния файл на iostream в нашия код. Това ще ни позволи да четем от и да пишем в конзолата.
- Включва пространството от имена std, за да използва неговите класове и функции, без да го извиква.
- Извикване на функцията main(), в която трябва да се добави код.
- Начало на тялото на функцията main().
- Деклариране на масив с име age за съхраняване на 5 целочислени елемента.
- Достъп до стойността, съхранена в индекс 2 на масива age и съхраняване на нейната стойност в променлива с име john.
- Отпечатване на стойността на променливата john на конзолата заедно с друг текст.
Предимства на масив в C++
Ето плюсовете/ползите от използването на Array в C++:
- Елементите на масива могат да бъдат обхождани лесно.
- Лесен за манипулиране масив от данни.
- Елементите на масива могат да бъдат достъпни произволно.
- Масивите улесняват оптимизирането на кода; следователно можем да извършим много работа, използвайки по-малко код.
- Лесен за сортиране масив от данни.
Недостатъци на масив в C++
- Масивът има фиксиран размер; следователно не можем да добавяме нови елементи към него след инициализация.
- Разпределянето на повече памет от изискването води до загуба на памет, а по-малко разпределение на памет може да създаде проблем.
- Броят на елементите, които трябва да се съхраняват в масив, трябва да е известен предварително.
Oбобщение
- Масивът е структура от данни, която съхранява елементи от един и същи тип данни.
- Елементите на масива се съхраняват последователно.
- Елементите на масива се обозначават с помощта на съответните им индекси. Първият елемент е с индекс 0, а последният е с индекс n-1, където е общият брой елементи на масива.
- Декларирането на масив включва дефиниране на типовете данни на елементите на масива, както и броя на елементите, които да се съхраняват в масива.
- Едномерният масив съхранява елементите последователно.
- Двумерният масив съхранява елементи в редове и колони.
- Триизмерният масив е масив от масиви.
- Елементите могат да се добавят към масив, като се използват техните индекси.
- Достъпът до елементите на масива се осъществява чрез техните индекси.
- Многомерният масив има повече от едно измерение.
- Името на масива сочи към неговия първи елемент.
- Масивите имат фиксиран размер, което означава, че не могат да се добавят нови елементи към масива след инициализацията му.











