22. juli 2001 - 13:10
Der er
24 kommentarer og 2 løsninger
Funktion som returner et array
Er det muligt at lave en funktion i C som returnerer et array??? Mit bud er: int liste(int x,int y)[] { int temp[2]; temp[0]=x temp[1]=y return temp; } Når man compillerer får man en fejl som siger at man har lavet en funktion som returnerer et array. Compileren har ret, men hvorfor kan den ikke klare det???
Annonceindlæg fra Infor
Du kan ikke retunere et array på denne måde. Eller sagt med andre ord: En funktion kan ikke retunere et array. Den kan kun retunere en pointer på et array. int* liste(int x,int y) { int* temp = new int [2]; temp[0]=x; temp[1]=y; return temp; }
Bliver \"temp\" ikke nedlagt når funktionen afsluttes?
Den foreslåede funktion giver en fejl når den compilleres. test.c: In function \'liste\': test.c:11: \'new\' undeclared (first use in this function) test.c:11: (Each undeclared identifier is reported only once test.c:11: for each function it appears in.) test.c:11: parse error before \'int\'
folle >> har du lavet koden i en c++ compiler eller i en c compiler...?? \'new\' virker vist nok kun i c++ !!! og jo \'temp\' bliver nedlagt når funktionen afsluttes.. men du returnerer jo adressen videre til array\'et ved kaldet: \'return\' så...: lav koden i c++ hvis det skal virke..!
Det virker hvis jeg bruger c++ compileren. Jeg har fået opgaven i forbindelse med mit studie og en af betingelserne er at jeg skriver programmet i C. Kan man virkelig ikke returnere et array i C???
Den returnerede pointer (arrayet) skal også initialiseres som en pointer. Den kan så refereres som et array. FX: #include <iostream.h> #include <conio.h> int* GetArray() { int* Temp = new int[3]; Temp[0] = 10; Temp[1] = 20; Temp[2] = 30; return Temp; } void main() { int* Temp = GetArray(); cout << Temp[0] << endl; cout << Temp[1] << endl; cout << Temp[2] << endl; getch(); } // Borland C++ 5.02
ok denne version er lidt skummel men skulle virke: int* liste(int x,int y) { int tempdir[2]; int* temp = tempdir; temp[0]=x; temp[1]=y; return temp; }
Ups!!! Jeg havde ikke lige set de nyeste indlæg...
det går nogle gange meget stærkt her på eksperten... man når lige at svare og så har andre også gjort det...
22. juli 2001 - 16:36
#10
YEPS!!!
22. juli 2001 - 16:37
#11
den burde også virke: int* liste(int x,int y) { int temp[2]; temp[0]=x; temp[1]=y; return &temp; }
22. juli 2001 - 16:37
#12
Jeg ved ikke så meget om ren C, men skal man ikke bruge malloc til at allokere memory???
22. juli 2001 - 16:38
#13
jo, men er vist ikke nødvendigt for et array på en 2-3 integers er det ??
22. juli 2001 - 16:40
#14
Det tror jeg... Jeg tror ikke dine 2 sidste forslag kommer til at virke!
22. juli 2001 - 16:43
#15
lad manden prøve dem...
22. juli 2001 - 16:46
#16
Selvfølgelig... Men der skal altså allokeres memory på en eller anden måde!
22. juli 2001 - 16:53
#17
denne virker...: #include <stdio.h> int* liste(int x,int y) { int temp[2]; temp[0]=x; temp[1]=y; return &temp[0]; } void main( ) { int * tbl = liste( 2, 1 ); printf( \"(x,y) = (%d,%d)\\n\", tbl[0], tbl[1] ); }
22. juli 2001 - 16:56
#18
både med eller uden NEW/MALLOC bliver der allokeret hukommelse... det er blot et spørgsmål om hvor... når man bruger new/malloc skal man jo også huske at slette dem igen (delete osv..)
22. juli 2001 - 16:56
#19
eksemplet virker i \'C\'
22. juli 2001 - 16:59
#20
hvis du bruger STORE arrays er det et MUST at du allokerer hukommelsen selv med new/alloc men for 2-3 integers kan det være hip som hap...
22. juli 2001 - 17:05
#21
karlkoder >> jeg tager mine ord i mig igen!!!
22. juli 2001 - 17:48
#22
det er okay.. men kan ham \'folle\' bruge det ??
22. juli 2001 - 17:53
#23
Koden int* liste(int x,int y) { int temp[2]; temp[0]=x; temp[1]=y; return &temp[0]; } Er efter min mening dybt kriminel :-) Arrayet int temp[2] bliver lokalt allokeret inde i funktionen. Når der retuneres fra funktionen er arrayet ikke længere \"legalt\" (deallokeret). Det har ikke noget at gøre med om man bruger små eller store arrays. new er et keyword i c++. Det findes ikke i c. Brug (*int)malloc(sizeof(int) * arraySize) itedet. Husk malloc deallokeres med free() og new med delete.
22. juli 2001 - 17:57
#24
morten2 >> du har ret.. men burde man egentlig ikke sende en reference til et array til funktionen istedet og så \'returnere\' denne.. ?? det ville jeg personlig gøre..
22. juli 2001 - 17:58
#25
egentligt burde arrayet være allokeret \'udenfor\' funktionen...
22. juli 2001 - 18:01
#26
Nu har jeg fået det til at virke... Tak for hjælpen :-)
Kurser inden for grundlæggende programmering