Taulukot ovat yksi eniten käytetyistä tietokoneohjelmien jäsennellyn datan tallennustavoista. Niiden käsittely voidaan tehdä erilaisilla algoritmeilla, jotka on toteutettu luokan menetelmissä ja toiminnoissa. Vastaavasti usein vaaditaan siirtämään taulukko funktiolle. C- ja C ++ -kielet tarjoavat suuren vapauden valita menetelmät tämän toiminnon suorittamiseksi.
Se on välttämätöntä
C- ja C ++ -kielien kääntäjät
Ohjeet
Vaihe 1
Siirrä kiinteän kokoinen taulukko toiminnolle. Muuta funktion prototyyppi sisältämään sopivan tyyppinen argumentti. Esimerkiksi funktion ilmoitus, joka ottaa parametriksi kolmen elementin kokonaislukuisten numeeristen arvojen taulukon, voi näyttää tältä:
void ArrayFunction (int aNumbers [3]);
Tällaista toimintoa kutsutaan välittämällä taulukko suoraan sille argumenttina:
void SomeFunction ()
{
int aNumerot = {1, 2, 3};
ArrayFunction (aNumbers);
}
Siirretty data kopioidaan pinolle. Matriisin muokkaaminen kutsutussa toiminnossa ei muuta lähdettä.
Vaihe 2
Siirrä vaihtelevan pituiset taulukot funktiolle. Tätä varten älä määritä vastaavan argumentin ulottuvuutta:
void ArrayFunction (int aNumbers );
Moniulotteiset taulukot voidaan välittää myös samalla tavalla (vain ensimmäinen "ulottuvuus" voi olla muuttuja):
void ArrayFunction (int aNumbers [3] [2]);
Näitä toimintoja kutsutaan samalla tavalla kuin ensimmäisessä vaiheessa.
Jotta pystyt käsittelemään funktion muuttuvan pituiset taulukot oikein, sinun on joko välitettävä nimenomaisesti niiden elementtien määrä ylimääräisen parametrin kautta tai käytettävä käytäntöjä, jotka asettavat rajoituksia itse elementtien arvoille (tietty arvo on oltava merkki taulukon lopusta).
Vaihe 3
Ohita taulukko osoittimella. Funktion argumentin on osoitettava arvoa, jonka tyyppi vastaa taulukon elementtejä. Esimerkiksi:
void ArrayFunction (int * pNumbers);
Pääsy funktion tietoihin voidaan suorittaa sekä taulukkoelementtien kanssa työskentelyssä että osoitearitmeettisesti:
void ArrayFunction (int * pNumbers)
{
pNumerot [0] = 10; // pääsy elementtiin 0
* (pNumerot + 1) = 20; // pääsy tuotteeseen 1
}
Ole varovainen! Koska funktiolle ei välitetä kopiota tiedoista, vaan siihen osoitinta, alkuperäistä taulukkoa muutetaan.
Tämän menetelmän etuna on nopeus, laskennallisten resurssien säästö ja tietty joustavuus. Joten voit kutsua kohdefunktiota välittämällä sen osoittimen matriisin mielivaltaiselle elementille:
void SomeFunction ()
{
int aNumerot = {1, 2, 3};
ArrayFunction (aNumbers); // koko taulukko
ArrayFunction (& aNumbers [1]); // alkaen toisesta elementistä
}
Tämä menetelmä sisältää myös yleensä käytettävissä olevien elementtien määrän välittämisen lisäparametrissa tai matriisiterminaalin käyttämisen.
Vaihe 4
Siirrä tietoja funktiolle parametrilla, joka on objekti tai viite ryhmän objektille, joka toteuttaa taulukon toiminnallisuuden. Tällaisia luokkia tai luokkamalleja löytyy yleensä suosituista kirjastoista ja kehyksistä (QVector Qt: ssä, CArray MFC: ssä, std:: vector STL: ssä jne.).
Usein nämä luokat toteuttavat implisiittisen tietojen jakamisstrategian referenssilaskennalla ja suorittavat syväkopion vain, kun tietoja muokataan (kopio kirjoitettaessa). Tämän avulla voit minimoida laskennallisten resurssien kulutuksen myös siinä tapauksessa, että matriisiobjektit välitetään arvon perusteella funktioiden ja menetelmien argumenttien avulla:
void ArrayFunction (QVector oArray)
{
int nItemCount = oArray.count ();
int nItem = oArray [0];
}
void SomeFunction ()
{
QVector oArray (10);
varten (int i = 0; i