using arrays with functions c
Всичко, което трябва да знаете за масивите с функции в C ++:
В този урок ще обсъдим как масивите могат да се използват с функции в C ++. По принцип масивите могат да се предават на функции като аргументи по същия начин, както ние предаваме променливите на функциите.
Но оценката на формалните параметри е малко по-различна, когато става въпрос за масиви. Преди реално да проучим предаването на масиви към функции, трябва да обсъдим накратко концепцията за указател към масив.
=> Проверете тук уроците за задълбочено обучение за C ++.
Какво ще научите:
- Показалец към масив
- Предаване на масиви във функция
- Връщане на масиви от функции
- Заключение
- Препоръчително четене
Показалец към масив
Помислете за следния масив, съдържащ първите пет числа от последователността на Фибоначи.
int fibSeq(5) = {1,1,2,3,5};
Нека декларираме указател fibPtr, за да насочим този масив.
int* fibPtr; fibPtr = fibSeq;
Когато отпечатваме съдържанието на fibPtr, изходът ще бъде първият елемент от масива fibSeq. Това е така, защото името на масива без квадратни скоби се изчислява на указател към първия елемент на масива. По този начин в горния пример името „fibSeq“ сочи към първия елемент от масива „fibSeq“.
По-долу е изобразено изображение на същото:
Както е показано в горното изобразително представяне, fibPtr сочи към първия елемент от масива. По този начин, използвайки аритметиката на показалеца, можем да отпечатаме всички елементи на масива само с помощта на fibPtr.
Например, изразът * (fibPtr + 1) ще сочи към втория елемент на масива и т.н.
какво може да се възпроизвежда .swf файлове
Нека поставим това в програма и проверим изхода на „fibSeq“ и „fibPtr“:
#include #include using namespace std; int main() { int fibSeq(5) = {1,1,2,3,5}; int* fibPtr; fibPtr = fibSeq; cout<<'
fibSeq points to :'<<*fibSeq; cout<<'
fibSeq(0): '<<*fibPtr; cout<<'
fibSeq(1): '<<*(fibPtr + 1); cout<<'
fibSeq(2): '<<*(fibPtr + 2); cout<<'
fibSeq(3): '<<*(fibPtr + 3); cout<<'
fibSeq(4): '<<*(fibPtr + 4); } }
Изход:
fibSeq сочи към: 1
fibSeq (0): 1
fibSeq (1): 1
fibSeq (2): 2
fibSeq (3): 3
fibSeq (4): 5
В горния пример декларираме променлива на указател fibPtr и след това я караме да насочва масива, като присвояваме името на масива на fibPtr. Когато правим това, правим fibPtr да сочи към първия елемент от масива. След това отпечатваме всички стойности на масив, използвайки fibPtr.
Предаване на масиви във функция
Когато имаме работа с функции, ние предаваме масиви на функцията по подобен начин, както предаваме променливи на функцията. Но ние не предаваме променливата на масива от тип ().
Вместо това предаваме указателя на масива, т.е.името на масива, който сочи към първия елемент на масива. Тогава формалният параметър, който приема този указател, всъщност е променлива на масив. Докато предаваме показалеца, можем директно да модифицираме масива във функцията.
Помислете за следната програма, която изчислява квадрата на всеки елемент от първите пет елемента в последователността на Фибоначи, за да демонстрира преминаването на масив към функция.
#include #include using namespace std; void fibSeqSquare(int fibSeq()) { for(int i=0;i<5;i++) { fibSeq(i) *= fibSeq(i); } } int main() { int fibSeq(5) = {1,1,2,3,5}; fibSeqSquare(fibSeq); for(int i=0;i<5;i++) { cout<В горния пример изчисляваме квадрата на всеки елемент в последователност на Фибоначи. Този квадрат се изчислява във функция. Следователно ние предаваме името на масива на функцията “fibSeqSquare”, докато извикваме функцията от main. Вътре във функцията изчисляваме квадратите на всеки елемент.
Тъй като сме предали препратката към масива чрез указател, каквито и модификации да направим в масива във функцията, ще отразяват масива. Следователно, когато отпечатваме масива в основната функция, получаваме квадратите на всеки елемент като изход.
В горния пример видяхме, че аргументът на масива (формален параметър) на функцията fibSeqSquare не указва размера на масива, а само квадратните скоби (()), за да посочи, че това е масив. Това е един от начините за задаване на аргументите на масива.
Друг начин за определяне на аргумента на масива в официалния списък с параметри е чрез определяне на размера на масива в квадратните скоби. И двата аргумента работят по подобен начин. Това са просто двата начина, по които указваме аргументите на масива.
Следващият пример показва аргумент Array, посочен с размер.
#include #include using namespace std; void displayFibSeq(int fibSeq(5)) { for(int i=0;i<5;i++) { cout<Горният пример има функция за показване на последователността на Фибоначи. Функцията има параметър като масив, в който също сме посочили размера на масива.
Също така можем да предаваме многомерни масиви на функции по същия начин, както е показано по-горе.
как да намеря xpath в хром за селен
Връщане на масиви от функции
Когато става въпрос за връщане на масив от функция, C ++ не ни позволява да върнем цял масив от функцията. Можем обаче да направим функция за връщане на указател към масива. Но в това има уловка.
Помислете за следния код:
int* funcArray() { int arr(3) = {1,2,3}; return arr; } int main() { int* aryPtr = funcArray(); cout< Въпреки че горната програма просто връща показалеца към първия елемент на масив от функцията, тя не работи както се очаква. Не можем да гарантираме, че програмата ще ни даде правилния изход. Той може или не може да даде правилния изход.
Това е така, защото връщаме локалната променлива от функцията и не сме сигурни дали тя ще бъде в обхвата по времето, когато бъде върната или не.
По този начин, накратко, C ++ не благоприятства връщането на масиви от функции.
Ако изобщо трябва да върнем масиви от функцията, трябва да използваме някой от следните методи:
# 1) Връщане на динамично разпределени масиви
Можем да върнем указателя на масива от динамично разпределения масив. Използваме оператора ‘new’ за динамично разпределение на масива. Тъй като това е динамичен масив, той ще бъде в обхват, освен ако не изтрием масива. Следователно програмата ще работи добре, когато върнем масива.
Това е показано в следващия пример.
#include #include using namespace std; int* funcArray() { int* arr = new int(3); arr(0)=1; arr(1)=2; arr(2)=3; return arr; } int main() { int* aryPtr = funcArray(); cout< Изход:
1 2 3
# 2) Връщащи се статични масиви
Тъй като статичните променливи / масиви имат обхват в цялата програма, ние също можем да върнем статични масиви от функции. Можем да вземем пример, за да докажем това. Това е същото като предишния пример с единствената разлика, че в този пример сме използвали статичен масив вместо динамично разпределения масив.
#include #include using namespace std; int* funcArray() { static int arr(3); arr(0)=1; arr(1)=2; arr(2)=3; return arr; } int main() { int* aryPtr = funcArray(); cout< Изход:
1 2 3
Забележка : Можем също да използваме структура, за да обвием масива вътре в него и след това да върнем тази структура. По този начин естествено ще върнем масив от функция. Но това не е много осъществим метод за връщане на масиви.
Заключение
По този начин в този урок обсъдихме подробно масиви по отношение на функциите. Надяваме се, че този урок ще е помогнал да се изчистят всички съмнения и заблуди относно C ++ масивите и функциите.
Въпроси за интервю за sql сървър за опитни
=> Вижте Перфектното ръководство за обучение на C ++ тук.
Препоръчително четене