Ինչպես զանգվածը փոխանցել ֆունկցիային

Բովանդակություն:

Ինչպես զանգվածը փոխանցել ֆունկցիային
Ինչպես զանգվածը փոխանցել ֆունկցիային

Video: Ինչպես զանգվածը փոխանցել ֆունկցիային

Video: Ինչպես զանգվածը փոխանցել ֆունկցիային
Video: Ֆունկցիայի հասկացությունը: Ֆունկցիայի գրաֆիկ. 7-րդ դասարան 2024, Մայիս
Anonim

Raանգվածները համակարգված ծրագրերում տվյալների կառուցվածքային պահպանման առավելապես օգտագործվող ձևերից մեկն են: Դրանց մշակումը կարող է կատարվել դասի մեթոդներում և գործառույթներում ներդրված տարբեր ալգորիթմներով: Ըստ այդմ, հաճախ պահանջվում է զանգվածը փոխանցել ֆունկցիային: C և C ++ լեզուները մեծ ազատություն են առաջարկում այս գործողության կատարման մեթոդներն ընտրելու հարցում:

Ինչպես զանգվածը փոխանցել ֆունկցիային
Ինչպես զանգվածը փոխանցել ֆունկցիային

Դա անհրաժեշտ է

C և C ++ լեզուների կազմողներ:

Հրահանգներ

Քայլ 1

Գործառույթին փոխանցեք ֆիքսված չափի զանգված: Փոխեք ֆունկցիայի նախատիպը ՝ համապատասխան տեսակի փաստարկ պարունակելու համար: Օրինակ, ֆունկցիայի հայտարարագրումը, որը որպես պարամետր վերցնում է երեք տարրերի ամբողջ թվային արժեքների զանգված, կարող է նման լինել.

անվավեր ArrayFunction (int aNumbers [3]);

Նման ֆունկցիան կոչվում է զանգված ՝ ուղղակիորեն դրան փոխանցելով, որպես փաստարկ.

ուժը կորցրած SomeFunction ()

{

int aNumbers = {1, 2, 3};

ArrayFunction (aNumbers);

}

Փոխանցված տվյալները պատճենվում են դեղի վրա: Կոչված գործառույթում զանգվածը փոփոխելը չի փոխում աղբյուրը:

Քայլ 2

Փոփոխական երկարության զանգվածները փոխանցեք գործառույթին: Դա անելու համար պարզապես մի նշեք համապատասխան փաստարկի չափը.

անվավեր ArrayFunction (int aNumbers );

Բազմաչափ զանգվածները կարող են փոխանցվել նաև նման ձևով (միայն առաջին «չափումը» կարող է փոփոխական լինել).

անվավեր ArrayFunction (int aNumbers [3] [2]);

Այս գործառույթները կոչվում են նույն կերպ, ինչպես առաջին քայլում:

Որպեսզի ֆունկցիայի մեջ փոփոխական երկարության զանգվածներ ճիշտ մշակվեն, դուք պետք է կամ հստակորեն փոխանցեք դրանց տարրերի քանակը լրացուցիչ պարամետրով, կամ օգտագործեք պայմանագրեր, որոնք սահմանափակումներ են դնում հենց դրանց տարրերի արժեքների վրա (որոշակի արժեք պետք է լինի զանգվածի վերջի նշան):

Քայլ 3

Անցեք զանգվածը ցուցիչով: Ֆունկցիայի փաստարկը պետք է լինի զանգվածի տարրերին համապատասխան տիպի արժեքի ցուցիչ: Օրինակ:

անվավեր ArrayFunction (int * pNumbers);

Ֆունկցիայի մեջ տվյալների հասանելիությունը կարող է իրականացվել ինչպես զանգվածի տարրերի հետ աշխատելու նշման մեջ, այնպես էլ հասցեի թվաբանության օգտագործմամբ.

անվավեր ArrayFunction (int * pNumbers)

{

pNumbers [0] = 10; // մուտք դեպի 0 տարր

* (pNumbers + 1) = 20; // 1-ին կետի հասանելիություն

}

Զգույշ եղիր! Քանի որ գործառույթը փոխանցվում է ոչ թե տվյալների պատճենը, այլ դրան ցուցիչ է, սկզբնական զանգվածը կփոփոխվի:

Այս մեթոդի առավելությունն է արագությունը, հաշվարկային ռեսուրսների խնայողությունը և որոշակի ճկունությունը: Այսպիսով, դուք կարող եք անվանել թիրախային գործառույթը ՝ այն ցուցիչ փոխանցելով զանգվածի կամայական տարրի:

ուժը կորցրած SomeFunction ()

{

int aNumbers = {1, 2, 3};

ArrayFunction (aNumbers); // ամբողջ զանգված

ArrayFunction (& թվեր [1]); // սկսած երկրորդ տարրից

}

Այս մեթոդը սովորաբար ներառում է նաև լրացուցիչ պարամետրում առկա տարրերի քանակի փոխանցում կամ զանգվածի տերմինատորի օգտագործում:

Քայլ 4

Տվյալներ փոխանցեք գործառույթին այն պարամետրով, որը օբյեկտ է կամ հղում է այն դասի օբյեկտին, որն իրականացնում է զանգվածի ֆունկցիոնալությունը: Նման դասերը կամ դասի ձևանմուշները սովորաբար հանդիպում են հանրաճանաչ գրադարաններում և շրջանակներում (QVector in Qt, CArray in MFC, std:: vector in STL և այլն):

Հաճախ այս դասերը իրականացնում են տվյալների փոխանակման անուղղակի ռազմավարություն `հղումների հաշվարկով` խորը պատճեն կատարելով միայն տվյալների փոփոխման ժամանակ (պատճենը գրելու վրա): Սա թույլ է տալիս նվազագույնի հասցնել հաշվարկային ռեսուրսների սպառումը նույնիսկ զանգվածի օբյեկտները ըստ արժեքի գործառույթների և մեթոդների փաստարկների միջոցով փոխանցելու դեպքում.

անվավեր ArrayFunction (QVector oArray)

{

int nItemCount = oArray.count ();

int nItem = oArray [0];

}

ուժը կորցրած SomeFunction ()

{

QVector oArray (10);

համար (int i = 0; i

Խորհուրդ ենք տալիս: