Как да предавам масив на функция

Съдържание:

Как да предавам масив на функция
Как да предавам масив на функция

Видео: Как да предавам масив на функция

Видео: Как да предавам масив на функция
Видео: Передача массива в функцию. Как передать массив в функцию. C+ для начинающих. Урок #35. 2024, Ноември
Anonim

Масивите са една от най-използваните форми на структурирано съхранение на данни в компютърни програми. Тяхната обработка може да се извърши чрез различни алгоритми, внедрени в клас методи и функции. Съответно, често се изисква да се предаде масив на функция. Езиците C и C ++ предлагат голяма свобода при избора на методите за извършване на това действие.

Как да предавам масив на функция
Как да предавам масив на функция

Необходимо е

компилатори на езици C и C ++

Инструкции

Етап 1

Предайте масив с фиксиран размер на функцията. Променете прототипа на функцията, за да съдържа аргумент от подходящия тип. Например декларацията на функция, която приема масив от целочислени числови стойности на три елемента като параметър, може да изглежда така:

void ArrayFunction (int aNumbers [3]);

Такава функция се извиква чрез предаване на масив директно към него като аргумент:

void SomeFunction ()

{

int aNumbers = {1, 2, 3};

ArrayFunction (aNumbers);

}

Прехвърлените данни се копират в стека. Модифицирането на масива в извиканата функция не променя източника.

Стъпка 2

Предайте на функцията масиви с променлива дължина. За да направите това, просто не посочвайте измерението на съответния аргумент:

void ArrayFunction (int aNumbers );

Многомерните масиви също могат да се предават по подобен начин (само първото „измерение“може да бъде променливи):

void ArrayFunction (int aNumbers [3] [2]);

Тези функции се извикват по същия начин, както в първата стъпка.

За да можете правилно да обработвате масиви с променлива дължина във функция, трябва или да предадете изрично броя на техните елементи чрез допълнителен параметър, или да използвате конвенции, които налагат ограничения върху стойностите на самите елементи (определена стойност трябва да е знак за края на масива).

Стъпка 3

Предайте масива по указател. Аргументът на функцията трябва да е указател на стойност с тип, съответстващ на елементите на масива. Например:

void ArrayFunction (int * pNumbers);

Достъпът до данни във функция може да се осъществи както в обозначението за работа с елементи на масив, така и с използване на адресна аритметика:

void ArrayFunction (int * pNumbers)

{

pNumbers [0] = 10; // достъп до елемент 0

* (pNumbers + 1) = 20; // достъп до елемент 1

}

Бъди внимателен! Тъй като функцията се предава не копие на данните, а указател към нея, оригиналният масив ще бъде модифициран.

Предимството на този метод е бързина, икономичност на изчислителните ресурси и известна гъвкавост. И така, можете да извикате целевата функция, като й предадете указател на произволен елемент от масива:

void SomeFunction ()

{

int aNumbers = {1, 2, 3};

ArrayFunction (aNumbers); // цял масив

ArrayFunction (& aNumbers [1]); // започвайки от втория елемент

}

Този метод също обикновено включва предаване на броя на наличните елементи в допълнителен параметър или използване на терминатор на масив.

Стъпка 4

Предава данни на функция с параметър, който е обект или препратка към обект от класа, който реализира функционалността на масива. Такива класове или шаблони на класове обикновено се намират в популярни библиотеки и рамки (QVector в Qt, CArray в MFC, std:: vector в STL и др.).

Често тези класове прилагат имплицитна стратегия за споделяне на данни с преброяване на референции, като извършват дълбоко копиране само когато данните са модифицирани (копиране при запис). Това ви позволява да минимизирате потреблението на изчислителни ресурси, дори в случай на предаване на масивни обекти по стойност чрез аргументите на функции и методи:

void ArrayFunction (QVector oArray)

{

int nItemCount = oArray.count ();

int nItem = oArray [0];

}

void SomeFunction ()

{

QVector oArray (10);

за (int i = 0; i

Препоръчано: