Taulukoiden Palauttaminen Funktiosta
Pyyhkäise näyttääksesi valikon
Tärkeä rajoitus: vain dynaamisia taulukoita voidaan palauttaa funktioista. Tämä rajoitus johtuu funktioiden paikallisesta näkyvyydestä; funktiossa luodut staattiset taulukot ovat käytettävissä vain kyseisessä funktiossa.
Jos yrität palauttaa paikallisesti luodun taulukon, kohtaat rajoituksen funktioiden näkyvyyden vuoksi (yrität palauttaa olemattomien muuttujien osoitteen, mikä johtaa virheeseen).
Dynaamisen taulukon palauttaminen
Toisin kuin paikalliset muuttujat, jotka vapautetaan, kun funktio päättyy, dynaaminen muisti, joka on varattu new[]-operaattorilla, mahdollistaa tietojen säilymisen funktiosta poistumisen jälkeen. Tämän ansiosta voimme päästä käsiksi funktiossa luotuihin muuttujiin niiden osoitteiden avulla.
Dynaamisen taulukon palauttamiseksi funktiossa tulee käyttää seuraavia tyyppimääreitä:
dataType*yksidimensionaaliselle taulukolle.dataType**kaksidimensionaaliselle taulukolle.
main.cpp
12345678910111213141516171819#include <iostream> // Function to create and return a dynamic 1D array int* createArray(const int size) { int* arr = new int[size]; for (int i = 0; i < size; ++i) arr[i] = i + 1; // Example initialization return arr; } int main() { int size = 5; int* myArray = createArray(size); // Don't forget to delete the dynamically allocated memory delete[] myArray; }
Funktio varaa dynaamisesti muistia kokonaislukutaulukolle annetun koon mukaisesti. Se alustaa taulukon alkiot arvoilla 1 taulukon size-kokoon asti. Funktio palauttaa osoittimen dynaamisesti varatun kokonaislukutaulukon ensimmäiseen alkioon, jota voidaan nyt käyttää main()-lohkon sisällä.
main.cpp
1234567891011121314151617181920212223242526272829303132333435#include <iostream> // Function to create and return a dynamic 2D array int** createArray(const int rows, const int cols) { int** arr = new int*[rows]; for (int i = 0; i < rows; ++i) { arr[i] = new int[cols]; for (int j = 0; j < cols; ++j) { arr[i][j] = i * cols + j + 1; // Example initialization } } return arr; } int main() { int rows = 3; int cols = 2; int** myArray = createArray(rows, cols); // Use the returned 2D array for (int i = 0; i < rows; ++i) { for (int j = 0; j < cols; ++j) { std::cout << myArray[i][j] << " "; } std::cout << std::endl; } // Don't forget to delete the dynamically allocated memory for (int i = 0; i < rows; ++i) { delete[] myArray[i]; } delete[] myArray; return 0; }
Periaate on sama kuin palautettaessa yksidimensioinen taulukko: ainoa ero on, että meidän täytyy palauttaa osoitin osoittimien taulukkoon käyttämällä int**-tyyppimäärettä palauttaaksemme kaksiulotteisen taulukon.
Kiitos palautteestasi!
Kysy tekoälyä
Kysy tekoälyä
Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme