Paano Ipasa Ang Isang Array Sa Isang Pagpapaandar

Talaan ng mga Nilalaman:

Paano Ipasa Ang Isang Array Sa Isang Pagpapaandar
Paano Ipasa Ang Isang Array Sa Isang Pagpapaandar

Video: Paano Ipasa Ang Isang Array Sa Isang Pagpapaandar

Video: Paano Ipasa Ang Isang Array Sa Isang Pagpapaandar
Video: Как сложить все числа в массиве? JavaScript 2024, Nobyembre
Anonim

Ang mga array ay isa sa mga pinaka ginagamit na form ng nakabalangkas na imbakan ng data sa mga programa sa computer. Ang kanilang pagproseso ay maaaring gawin ng iba't ibang mga algorithm na ipinatupad sa mga pamamaraan at pag-andar ng klase. Alinsunod dito, madalas na kinakailangan upang pumasa sa isang array sa isang pagpapaandar. Ang mga wikang C at C ++ ay nag-aalok ng malaking kalayaan sa pagpili ng mga pamamaraan ng pagsasagawa ng aksyong ito.

Paano ipasa ang isang array sa isang pagpapaandar
Paano ipasa ang isang array sa isang pagpapaandar

Kailangan iyon

Mga nagtitipon ng mga wika ng C at C ++

Panuto

Hakbang 1

Ipasa ang isang nakapirming laki ng array sa pagpapaandar. Baguhin ang prototype ng pagpapaandar upang maglaman ng isang argument ng naaangkop na uri. Halimbawa, ang pagdeklara ng isang pagpapaandar na tumatagal ng isang hanay ng mga integer na bilang ng bilang ng mga elemento bilang isang parameter ay maaaring magmukhang ganito:

walang bisa ang ArrayFunction (int aNumber [3]);

Ang ganitong pag-andar ay tinatawag sa pamamagitan ng pagpasa ng isang deretso direkta rito bilang isang argument:

walang bisa ang SomeFunction ()

{

int aNumber = {1, 2, 3};

ArrayFunction (aNumber);

}

Ang inilipat na data ay nakopya sa stack. Ang pagbabago ng array sa tinawag na pagpapaandar ay hindi binabago ang mapagkukunan.

Hakbang 2

Ipasa ang mga variable na haba ng arrays sa pagpapaandar. Upang magawa ito, huwag lamang tukuyin ang sukat ng kaukulang argumento:

walang bisa ang ArrayFunction (int aNumber );

Ang Multidimensional arrays ay maaari ding ipasa sa isang katulad na paraan (ang unang "dimensyon" lamang ang maaaring maging variable):

walang bisa ang ArrayFunction (int aNumber [3] [2]);

Ang mga pagpapaandar na ito ay tinatawag sa parehong paraan tulad ng sa unang hakbang.

Upang maiproseso nang tama ang mga array ng haba ng variable sa isang pagpapaandar, dapat mong malinaw na ipasa ang bilang ng kanilang mga elemento sa pamamagitan ng isang karagdagang parameter, o gumamit ng mga kombensyon na nagpapataw ng mga paghihigpit sa mga halaga ng mga elemento mismo (isang tiyak na halaga dapat ay isang tanda ng pagtatapos ng array).

Hakbang 3

Ipasa ang array sa pamamagitan ng pointer. Ang argumento ng pag-andar ay dapat na isang pointer sa isang halaga na may isang uri na naaayon sa mga elemento ng array. Halimbawa:

walang bisa ang ArrayFunction (int * pNumber);

Ang pag-access sa data sa isang pagpapaandar ay maaaring isagawa kapwa sa notasyon para sa pagtatrabaho sa mga elemento ng array, at paggamit ng address arithmetic:

walang bisa ang ArrayFunction (int * pNumber)

{

pNumber [0] = 10; // access sa element 0

* (pNumber + 1) = 20; // access sa item 1

}

Mag-ingat ka! Dahil ang pagpapaandar ay naipasa hindi isang kopya ng data, ngunit isang pointer dito, mababago ang orihinal na array.

Ang bentahe ng pamamaraang ito ay ang bilis, ekonomiya ng mga mapagkukunan ng computational at isang tiyak na kakayahang umangkop. Kaya, maaari mong tawagan ang target na pag-andar sa pamamagitan ng pagpasa nito ng isang pointer sa isang di-makatwirang elemento ng array:

walang bisa ang SomeFunction ()

{

int aNumber = {1, 2, 3};

ArrayFunction (aNumber); // buong array

ArrayFunction (& aNumber [1]); // simula sa ikalawang elemento

}

Karaniwang nagsasangkot din ang pamamaraang ito ng pagpasa ng bilang ng mga magagamit na elemento sa isang karagdagang parameter o paggamit ng isang terminator ng array.

Hakbang 4

Ipasa ang data sa isang pagpapaandar na may isang parameter na isang bagay o isang sanggunian sa isang bagay ng klase na nagpapatupad ng pag-andar ng array. Ang mga nasabing klase o template ng klase ay karaniwang matatagpuan sa mga tanyag na aklatan at balangkas (QVector sa Qt, CArray sa MFC, std:: vector sa STL, atbp.).

Kadalasan ang mga klase na ito ay nagpapatupad ng isang implicit na diskarte sa pagbabahagi ng data sa pagbibilang ng sanggunian, na gumaganap lamang ng isang malalim na kopya kapag binago ang data (kopya sa pagsulat). Pinapayagan ka nitong i-minimize ang pagkonsumo ng mga mapagkukunan ng computational kahit na sa kaso ng pagpasa ng mga object ng array ayon sa halaga sa pamamagitan ng mga argumento ng mga pagpapaandar at pamamaraan:

walang bisa ang ArrayFunction (QVector oArray)

{

int nItemCount = oArray.count ();

int nItem = oArray [0];

}

walang bisa ang SomeFunction ()

{

QVector oArray (10);

para sa (int i = 0; i

Inirerekumendang: