C++ returnera tvådimensionell array

Permalänk
Medlem

C++ returnera tvådimensionell array

Hur gör jag för att returnera denna array ur en funktion? Att returnera en endimensionell array fattar jag hur jag pekar på, men jag får fan inte till det med denna...

std::string array[3][2];

Visa signatur

"Allt du säger skall vara sant, men du behöver inte säga allt som är sant" - Göran Persson

Permalänk
Medlem

Skapar du arrayen i funktionen eller skickar du in den genom referens/pekare?
Vill du returnera den genom parameter eller returvärde?
Är den alltid av samma storlek?

Permalänk
Medlem

Enklast är ju att skapa arrayen och skicka en referens in i funktionen. Om du skapar arrayen inne i funktionen så kommer ju arrayen förvinna så fort funktionen returnerar.

Visa signatur

Core i7 7700K | Titan X (Pascal) | MSI 270I Gaming Pro Carbon | 32 GiB Corsair Vengeance LPX @3000MHz | Samsung 960 EVO 1TB

Permalänk
Medlem
Skrivet av Nioreh83:

Enklast är ju att skapa arrayen och skicka en referens in i funktionen. Om du skapar arrayen inne i funktionen så kommer ju arrayen förvinna så fort funktionen returnerar.

Inte nödvändigtvis med dynamisk minnesallokering...

Permalänk
Medlem
Skrivet av Nioreh83:

Enklast är ju att skapa arrayen och skicka en referens in i funktionen. Om du skapar arrayen inne i funktionen så kommer ju arrayen förvinna så fort funktionen returnerar.

Förutsatt att arrayen läggs på stacken

Om du skapar en array med new, så kommer minnet allokeras på heapen och finns kvar ända tills du explicit frigör minnesarean som arrayen ockuperade med delete.
Kom ihåg att matcha new med delete samt new[] med delete[]
se gärna: http://www.parashift.com/c%2B%2B-faq-lite/freestore-mgmt.html...

Så kort svar, två alternativ:
1) allokera minne på heap och returnera pekare/referens samt kom ihåg att frigöra minnet efter att funktionen som kallade på denna funktion är färdig med strängarna
2) ta som inargument en pekare/referens till arrayen som skapats av den kallande funktionen

Visa signatur

weeeee

Permalänk
Medlem

Såklart går det att göra new eller tom malloc om man vill, fast tänkte det är skönt att slippa hålla på med sådant.

Visa signatur

Core i7 7700K | Titan X (Pascal) | MSI 270I Gaming Pro Carbon | 32 GiB Corsair Vengeance LPX @3000MHz | Samsung 960 EVO 1TB

Permalänk
Medlem
Skrivet av Nioreh83:

Såklart går det att göra new eller tom malloc om man vill, fast tänkte det är skönt att slippa hålla på med sådant.

vill du slippa new & delete så är det som Nioreh83 sagt bara att referera in en pekare till en array till funktionen.

Visa signatur

orka