/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
Bech_bb 500
kyllekylle 500
jdjespers.. 500
gibson 300
scootergr.. 300
molokyle 287
10  strarup 270
return array i C
Fra : finn knussen


Dato : 23-05-06 18:58

hvordan retunere jeg et array fra en funktion i en (C-fil) til en
anden funktion i en anden (C-fil)


 
 
N_N (23-05-2006)
Kommentar
Fra : N_N


Dato : 23-05-06 19:35

> hvordan retunere jeg et array fra en funktion i en (C-fil) til en
> anden funktion i en anden (C-fil)

Ved ikke om man i det hele taget kan, men du kan returnere en pointer til et
array.



Ukendt (23-05-2006)
Kommentar
Fra : Ukendt


Dato : 23-05-06 20:08

Kommer lidt an på hvor du allokerer array'et henne, i den kaldende kode
eller inde i funktionen.
Idet førstnævnte er ret trivielt (bruges bl.a. med str* funktionerne),
går jeg ud fra at du tænker på den sidstnævnte situation hvor funktionen
opretter et array og returnerer det til kalderen i form af en pointer.

Så hvis vi taler om et array af f.eks. int kan det gøres som følger

/* Funktionen opretter et array og returnerer pointeren til det i
*parray og størrelsen af det som retur værdien. */
size_t create_array(int ** parray)
{
int i;
size_t array_size = 100;

*parray = malloc(array_size * sizeof(int));
for(i = 0; i < array_size; i++) {
*parray[i] = i+1;
}
return array_size;
}

int main(int argc, char ** argv)
{
int * array;
int array_size;
int i;

array_size = create_array(&array);
for(i = 0; i < array_size; i++) {
printf("%03d\n", array[i]);
}

/*
Frigiv hukommelsen efter brug. Dog vil det ofte af
symmetri- og kontekstmæssige årsager være fornuftigt
at lave en funktion, release_array(), der gør dette.
*/
free(array);
return 0;
}

Output:
001
002
003
....
099
100



finn knussen (slet H0AYO) skrev:
> hvordan retunere jeg et array fra en funktion i en (C-fil) til en
> anden funktion i en anden (C-fil)
>

Bertel Lund Hansen (24-05-2006)
Kommentar
Fra : Bertel Lund Hansen


Dato : 24-05-06 13:19

finn knussen skrev:

> hvordan retunere jeg et array fra en funktion i en (C-fil) til en
> anden funktion i en anden (C-fil)

Du berører et potentielt problem. Hvis du opretter et array i en
funktion, dør det når den afslutter, og en pointer dertil vil
være udefineret.

Jeg opretter f.eks. et array i main(), og så overfører jeg en
pointer dertil som parameter til alle de funktioner der skal
bearbejde det. Derved sikrer jeg mig at det er det originale
array der bliver ændret. Så lader jeg normalt funktionerne være
void, for der er ikke noget resultat der skal returneres -
medmindre man vil lave dem som bool der fortæller om det hele gik
godt.

--
Bertel
http://bertel.lundhansen.dk/      http://fiduso.dk/

Kim S. Pedersen (12-06-2006)
Kommentar
Fra : Kim S. Pedersen


Dato : 12-06-06 14:50

Bertel Lund Hansen wrote:
> finn knussen skrev:
>
>> hvordan retunere jeg et array fra en funktion i en (C-fil) til en
>> anden funktion i en anden (C-fil)
>
> Du berører et potentielt problem. Hvis du opretter et array i en
> funktion, dør det når den afslutter, og en pointer dertil vil
> være udefineret.

Ja, hvis det allokeres på stakken. Men med malloc er det intet problem.
Eller også kan du allokere det "static", men om det er en god løsning
afhænger din problem/kode i øvrigt.

Bertel Lund Hansen (12-06-2006)
Kommentar
Fra : Bertel Lund Hansen


Dato : 12-06-06 15:12

Kim S. Pedersen skrev:

> Ja, hvis det allokeres på stakken. Men med malloc er det intet problem.

Det er nemt nok at allokere og sørge for at arrayet er stabilt,
men en subrutine der snupper noget hukommelse, som skal frigives
et helt andet sted, det er en potentiel kilde til
hukommelsesspild.

Hvis rutinen imidlertid har som sit eneste/primære formål at
oprette et array, så er det jo logisk nok.

--
Bertel
http://bertel.lundhansen.dk/      http://fiduso.dk/

Kim S. Pedersen (13-06-2006)
Kommentar
Fra : Kim S. Pedersen


Dato : 13-06-06 11:37

Bertel Lund Hansen wrote:
> Kim S. Pedersen skrev:
>
>> Ja, hvis det allokeres på stakken. Men med malloc er det intet problem.
>
> Det er nemt nok at allokere og sørge for at arrayet er stabilt,
> men en subrutine der snupper noget hukommelse, som skal frigives
> et helt andet sted, det er en potentiel kilde til
> hukommelsesspild.

Øhh ja, det er klart, så tak for din "indsigt".....

>
> Hvis rutinen imidlertid har som sit eneste/primære formål at
> oprette et array, så er det jo logisk nok.
>

Søg
Reklame
Statistik
Spørgsmål : 177429
Tips : 31962
Nyheder : 719565
Indlæg : 6407950
Brugere : 218878

Månedens bedste
Årets bedste
Sidste års bedste