Nieuws:

Welkom, Gast. Alsjeblieft inloggen of registreren.
Heb je de activerings-mail niet ontvangen?

Auteur Topic: [C++] Array teruggeven van functie.  (gelezen 3335 keer)

Offline JV.com

  • Lid
[C++] Array teruggeven van functie.
« Gepost op: 2010/02/11, 17:05:46 »
Hallo mensen,

Wie weet hoe ik het volgende moet oplossen:

ik heb een functie die een X aantal class objecten aanmaakt  en initialiseert. Alleen nu hebben functies maar een beperkte "leventijd" en omdat de classe objecten ook binnen de functie aangemaakt worden in feite ook maar dit kunnen we vermeiden door het sleutelwoord "new" toe te voegen zodat de classe objecten buiten de stack in het vrije geheugenreuimte worden aangemaakt.

alleen nu moet ik dus een X aantal pointers aanmaken die verwijzen naar de class objecten alleen hoe zorg ik er voor dat ik een array van pointers als het ware kan opvangen als een array en kan returnen door de functie?  

Alvast bedankt,

JV.com
« Laatst bewerkt op: 2010/02/13, 13:14:03 door JV.com »

Offline Joshua822

  • Lid
Re: [C++] Array teruggeven van functie.
« Reactie #1 Gepost op: 2010/02/11, 17:30:51 »
Als X niet variabel is kun je een pointer naar het eerste element van de array returnen, en daarna bij deze pointer in de rest van je programma gewoon de index optellen om de elementen in je array uit te lezen. Je kunt volgens mij geen hele array returnen vanuit een functie, maar wel een pointer naar een bepaald element ;)
   

Offline JV.com

  • Lid
Re: [C++] Array teruggeven van functie.
« Reactie #2 Gepost op: 2010/02/11, 18:52:09 »
ik zat te denken, als ik nou ik de functie een array declareer in de vrije geheugen ruimte en dan een pointer naar deze array laten verwijzen(niet naar een element van de array maar naar de array zelf).  
« Laatst bewerkt op: 2010/02/11, 18:54:16 door JV.com »

Offline Joshua822

  • Lid
Re: [C++] Array teruggeven van functie.
« Reactie #3 Gepost op: 2010/02/11, 20:25:25 »
Citaat
ik zat te denken, als ik nou ik de functie een array declareer in de vrije geheugen ruimte en dan een pointer naar deze array laten verwijzen(niet naar een element van de array maar naar de array zelf). 

Uiteraard moet je geheugen reserveren voor de array. Anders zal je nadat de functie uitgevoerd is, via de gereturnde pointer alleen maar 0'en uitlezen. 

Vergeet trouwens het geheugen van de objecten en de array niet vrij te geven als het programma afloopt ! Dat is zeer belangrijk, omdat anders dat deel geheugen niet meer bruikbaar is voor andere applicatie's.

En voor alle duidelijkheid: een pointer naar een array bestaat niet. Een array is eigenlijk gewoon een opeenvolgende verzameling geheugenlocaties. Als je dus naar de array ( of beter gezegd, de opeenvolgende verzameling geheugenlocaties ) wilt verwijzen, verwijs je gewoon naar de geheugenlocatie van één van deze geheugenlocaties, of te wel, naar een element ( het is gebruikelijk om te verwijzen naar het eerste element, maar dat is niet strikt noodzakelijk ).

Offline Emil

  • Lid
Re: [C++] Array teruggeven van functie.
« Reactie #4 Gepost op: 2010/02/12, 00:04:32 »
Vergeet trouwens het geheugen van de objecten en de array niet vrij te geven als het programma afloopt ! Dat is zeer belangrijk, omdat anders dat deel geheugen niet meer bruikbaar is voor andere applicatie's.
Als je programma afloopt maakt het niets meer uit of je het geheugen vrij geeft, dat wordt sowieso weer vrij gegeven door het os als het programma beëindigd is.

Re: [C++] Array teruggeven van functie.
« Reactie #5 Gepost op: 2010/02/12, 08:12:53 »
#include <Sylph/Core/Array.h>
#include <Sylph/Core/Vector.h>
#include <Sylph/Core/Any.h>

Sylph::Array<Any> myFunction() {
     using namespace Sylph;
     Vector<Any> toReturn;
     // ...
     toReturn.push(Any(myPointer));
     // ...
     return toReturn.toArray();
}

Weeral een lastig probleem mooi opgelost door LibSylph :P
I use a Unix-based system, that means I'll get laid as often as I have to reboot.
LibSylph
SeySayux.net

Offline JV.com

  • Lid
Re: [C++] Array teruggeven van functie.
« Reactie #6 Gepost op: 2010/02/12, 11:20:05 »
Oke bedankt iedereen voor de uitleg, aleen nog een vraagje:

ik moet dus als ik en array wil "teruggeven" een pointer maken naar een element van de array, zoals dit:
int mijnarray[5] =  new int;
mijnarray[0] = 0;
..etc.

int *Pointer = mijnarray[0]; 

alleen mijn vraag is hoe kan ik via de pointer bij bijv. het 3e element van de array komen?

Grt,

JV.com

Offline Rachid

  • Lid
    • rachidbm
    • Mijn blog
Re: [C++] Array teruggeven van functie.
« Reactie #7 Gepost op: 2010/02/12, 11:46:20 »
Weeral een lastig probleem mooi opgelost door LibSylph :P
Als jij kon toveren, gebruikte dan iedereen LibSylph? :P
Ik heb er geen ervaring mee, maar kan me goed voorstellen dat je daar zo'n fan van bent.
Ben je ook blij dat Ubuntu zo toegankelijk en gratis is, en wil je graag net als ik iets terugdoen, kijk dan eens rond bij mwanzo, dé poort naar het bijdragen aan Ubuntu en haar gemeenschap!

Re: [C++] Array teruggeven van functie.
« Reactie #8 Gepost op: 2010/02/12, 16:26:46 »
Weeral een lastig probleem mooi opgelost door LibSylph :P
Als jij kon toveren, gebruikte dan iedereen LibSylph? :P
Nee, dan gebruikte iedereen een schroevendraaier in plaats van een hamer om een schroef in te draaien. En als voor deze schroef LibSylph een schoevendraaier is, tja...
Citaat
Ik heb er geen ervaring mee, maar kan me goed voorstellen dat je daar zo'n fan van bent.
Ik ben hoofd van de LibSylph-fanclub. Ook van de LibSylph-developersclub, trouwens :P

Even serieus nu, ik heb nog nergens een klasse zoals Sylph::Array gezien (de meeste werken gewoon met rauwe pointers, brrr...), dus als je een array wil returnen...
I use a Unix-based system, that means I'll get laid as often as I have to reboot.
LibSylph
SeySayux.net

Offline Joshua822

  • Lid
Re: [C++] Array teruggeven van functie.
« Reactie #9 Gepost op: 2010/02/12, 17:27:13 »
Citaat
alleen mijn vraag is hoe kan ik via de pointer bij bijv. het 3e element van de array komen?

Met deze syntax:

<pointer naar array> + <index>

Om maar een voorbeeld te geven in C++:
// Wijst de waarde van het derde element in de array waar naar verwezen wordt
// vanuit pointer_naar_array toe aan waarde3
waarde3 = **pointer_naar_array + 2;

Waarom die twee sterretjes om de waarde te verkrijgen ? Wel, heel simpel, de identifier van de array en de identifiers van de elementen van de arrays zijn eigenlijk pointers. Dus is een pointer naar een array een pointer naar een pointer. Vandaar dat je twee sterretjes nodig hebt om de waarde te verkrijgen ( Belangrijk: de functie dient hierom ook gedeclareerd te worden met als returntype "<naam van klasse>**" ). Als je slechts één sterretje meegeeft, zul je het geheugenadres van de variabel waar naar wordt verwezen krijgen.

Re: [C++] Array teruggeven van functie.
« Reactie #10 Gepost op: 2010/02/13, 09:28:29 »
x[2] of *x+2 is hetzelfde, trouwens... (tenzij je met operator overloading gaat werken...)
I use a Unix-based system, that means I'll get laid as often as I have to reboot.
LibSylph
SeySayux.net