using arrays with functions c
Све што треба да знате о низовима са функцијама на Ц ++:
У овом упутству ћемо размотрити како се низови могу користити са функцијама у Ц ++. Генерално, низови се могу прослеђивати функцијама као аргументи на исти начин као што преносимо променљиве функцијама.
Али процена формалних параметара је нешто другачија када су у питању низови. Пре него што заправо истражимо прослеђивање низова функцијама, морамо укратко разговарати о концепту показивача на низ.
=> Проверите овде детаљне туторијале за обуку за Ц ++.
Шта ћете научити:
- Показивач на низ
- Прослеђивање низова у функцију
- Враћање низова из функција
- Закључак
- Препоручено читање
Показивач на низ
Размотрите следећи низ који садржи првих пет бројева Фибоначијеве секвенце.
int fibSeq(5) = {1,1,2,3,5};
Прогласимо показивач фибПтр да усмери овај низ.
int* fibPtr; fibPtr = fibSeq;
Када исписујемо садржај фибПтр, излаз ће бити први елемент низа фибСек. То је зато што се име низа без угластих заграда процењује на показивач на први елемент низа. Тако у горњем примеру, назив „фибСек“ указује на први елемент низа „фибСек“.
Испод је сликовни приказ истог:
Као што је приказано у горњем сликовном приказу, фибПтр показује на први елемент низа. Тако помоћу аритметике показивача можемо исписати све елементе низа само помоћу фибПтр.
На пример, израз * (фибПтр + 1) указаће на други елемент низа и тако даље.
како прогласити флоат у јави
Ставимо ово у програм и проверимо излаз „фибСек“ и „фибПтр“:
#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); } }
Излаз:
фибСек указује на: 1
фибСек (0): 1
фибСек (1): 1
фибСек (2): 2
фибСек (3): 3
фибСек (4): 5
У горњем примеру, декларишемо променљиву показивача фибПтр, а затим је терамо да усмери низ додељивањем имена низа фибПтр. Када то урадимо, фибПтр показујемо на први елемент низа. Затим исписујемо све вредности низа помоћу фибПтр.
Прослеђивање низова у функцију
Када имамо посла са функцијама, преносимо низове функцији на сличан начин као што преносимо променљиве у функцију. Али не прослеђујемо променљиву низа типа ().
Уместо тога, преносимо показивач на низ, тј. Име низа који показује на први елемент низа. Тада је формални параметар који прихвата овај показивач заправо променљива низа. Док преносимо показивач, можемо директно модификовати низ унутар функције.
Размотрите следећи програм који израчунава квадрат сваког елемента од првих пет елемената у Фибоначијевој секвенци да би демонстрирао прослеђивање низа у функцију.
#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<У горњем примеру израчунавамо квадрат сваког елемента у Фибоначијевој секвенци. Овај квадрат се израчунава унутар функције. Отуда преносимо име низа функцији „фибСекСкуаре“ док позивамо функцију из маин-а. Унутар функције израчунавамо квадрате сваког елемента.
Како смо референцу на низ прослеђивали показивачем, било какве модификације које направимо у низу унутар функције, одражават ће низ. Стога, када исписујемо низ у главној функцији, добијамо квадрате сваког елемента као излаз.
У горњем примеру, видели смо да аргумент низа (формални параметар) функције фибСекСкуаре не наводи величину низа већ само углате заграде (()) да би указао да је то низ. Ово је један од начина специфицирања аргумената низа.
Други начин специфицирања аргумента низа у формалној листи параметара је одређивање величине низа унутар угластих заграда. Оба аргумента функционишу слично. То су једноставно два начина на која специфицирамо аргументе низа.
Следећи пример приказује аргумент Арраи наведен са сизе.
#include #include using namespace std; void displayFibSeq(int fibSeq(5)) { for(int i=0;i<5;i++) { cout<Горњи пример има функцију за приказ Фибоначијеве секвенце. Функција има параметар као низ у коме смо такође одредили величину низа.
Такође можемо проследити вишедимензионалне низове функцијама на исти начин као што је приказано горе.
како створити бинарно стабло претраживања у јави
Враћање низова из функција
Када је реч о враћању низа из функције, Ц ++ нам не дозвољава да вратимо читав низ из функције. Међутим, можемо направити функцију за враћање показивача на низ. Али у томе постоји квака.
Размотрите следећи део кода:
int* funcArray() { int arr(3) = {1,2,3}; return arr; } int main() { int* aryPtr = funcArray(); cout< Иако горњи програм из функције једноставно враћа показивач на први елемент низа, он не ради онако како се очекивало. Не можемо гарантовати да ће нам програм дати тачан резултат. Може дати или не дати тачан излаз.
То је зато што из функције враћамо локалну променљиву и нисмо сигурни да ли ће она бити у домету док се врати или не.
Дакле, укратко, Ц ++ не фаворизира враћање низова из функција.
Ако уопште морамо да вратимо низове из функције, треба да користимо било који од следећих метода:
# 1) Враћање динамички додељених низова
Показивач низа можемо вратити из динамички додељеног низа. Користимо оператор „ново“ за динамичко додељивање низа. Како је реч о динамичком низу, он ће бити у опсегу ако га не обришемо. Дакле, програм ће добро функционисати када вратимо низ.
То је приказано у следећем примеру.
#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
Белешка : Такође можемо користити структуру да омотамо низ унутар ње, а затим је вратимо. На тај начин природно ћемо вратити низ из функције. Али ово није баш изводљив метод враћања низова.
Закључак
Стога смо у овом упутству детаљно разговарали о низовима у односу на функције. Надамо се да би овај водич помогао да се разјасне све сумње и заблуде о Ц ++ низовима и функцијама.
=> Овде погледајте савршен водич за обуку за Ц ++.
Препоручено читање