03. maj 2001 - 23:19Der er
9 kommentarer og 1 løsning
længden af et array?
hejsa er ved at lære c++. simpelt spørgsmål: hvordan finder man længden af et array i c++? i java bruger man bare length, men hvad med c++? eller skal man hele tiden sende en size med som parameter?
Øhm, som jeg forstår vil du finde ud af hvor mange indexes der er i et array? F.eks
int testarray[200];
Arrayet her er jo på 200 indexes som du sikkert ved, men der er ikke nogen funktion eller noget kan returnere hvor mange indexes du har.
Hvis du vil have størrelsen af arrayet i bytes kan du bruge sizeof(void) F.eks:
int i = sizeof(testarray);
Så vil i indeholde det antal bytes som testarray bruger. Husk at testarray bruger lige meget hukommelse uanset hvad arrayet indeholder.(Undtagen arrays med pointer, f.eks char*) F.eks hvis du fyldte testarray med 0 (nuller) ville den fylde lige så meget som hvis den var fyldt op med int\'s max værdi. (Kan ikke huske hvad det er.... mener det er 32300 et eller andet) Men hvad skal du også bruge størrelsen af en array til? Altså med sizeof har det mange muligheder, men jeg kan ikke lige se hvad du kan bruge din viden om hvor mange indexes der er i et array. Hvis det er mig som har totalt misforstået spørgsmålet, så sig lige til, ik\'!? ;)
I C++ kan du finde størrelsen i bytes af et array med sizeof der hvor du har erklæret det! Hvis du leverer array\'et som parameter til en funktion, kan funktionen kun vide noget om længden, hvis denne er medført som separat parameter.
Øhh, Jesper, var det ikke lige det ´som jeg sagde? At man kunne finde størrelsen af array\'et i bytes vha. sizeof(). Men, som du også siger ligesom jeg også sagde, så kan man IKKE finde størrelsen af et array, altså hvor mange indexes der er, vha. af en funktion. Det er du nød til selv at fortælle dit program.
jespernaur, prøv lige at læse mit svar ovenover igen. Og svar mig så lige på om du ikke lige sagde det samme som jeg!?! <:S
=> codewarrior2000 Ja, du kan bruge sizeof til at finde den mængde HUKOMMELSE dit array bruger. Ex. int Test1[100]; double Test2[100]; int size1 = sizeof(Test1); // size1 er 400 (byte) int size2 = sizeof(Test2); // size2 er 800 (byte)
Du kan så finde antallet af elementer ved at dividere med datatypens størrelse. Ex. int size1 = sizeof(Test1)/sizeof(int); // size1 er 100 (elementer)
Du kan dog ikke bruge sizeof til at få størrelsen på dit array, hvis det fx er erklæret med new. Ex. int* pTest1 = new int[100]; int size1 = sizeof(pTest1); // size1 er 4 (byte) - nemlig størrelsen på pointeren
Hvilket udviklingsmiljø bruger du? Der findes ofte wrapper-classes til arrays mm. (fx MFC CArray) der indeholder funktioner hertil. Du kan også bruge en STL (Standard Template Library) vector...
=> alguesm \"Husk at testarray bruger lige meget hukommelse uanset hvad arrayet indeholder\"?????
Dette er naturligvis ikke sandt! Eftersom en Win32 int fylder 4 byte og en double 8 byte (for at tage et eksempel) bruger array\'s af de to typer selvfølgelig ikke lige meget hukommelse...
Der bruges visual 6.0 jeg vil gerne bruge det til at vide hvornår en forløkke skal termineres, når man gennemløber et array. i java kan jo bare sige int[] array = new int[10]; for(int i=0; i<array.length; i++);
Jeg mente ikke at det fyldte ligemeget hvilken type det var. For jeg ved godt at de forskellige typer fylder forskellige antal bytes.
Det jeg mente var at selvom alle int\'s i min testarray som jeg beskrev var fyldt med nuller eller om den var fyldt med 10.000 taller, så ville den fylde det samme, eftersom at hukommelsen ER allokeret lige efter du erklærer variablerne, og altså ikke bliver størrer i takt med indholdet.
Håber at du forstår hvad jeg mener (Og håber at jeg har ret! ;)
=> alguesm Du har ret, jeg misforstod dig... Det er ganske rigtigt, at en int (eller anden basetype) fylder det samme uanset om den indeholder 0, 1, 100000 eller ... (Derfor bør man naturligvis også vælge en datatype der ikke spilder unødig plads...)
Lige en lille kommentar mht. pointere. Man kan godt få størrelsen på den datatype arrayet indeholder, selvom det er oprettet med new. Det gøres blot ved at dereferenciere pointeren: int size2 = sizeof(*pTest2); // size2 er 8 hvis arrayet indeholder double (Win32)
=>codewarrior2000 Da du bruger Visual C++, kan du jo evt. bruge MFC\'s CArray. Den har metoder til de du efterspørger:
GetSize, GetUpperBound, SetSize, RemoveAt, GetAt, Add og flere... Det smarte ved CArray er, at arrayet vokser automatisk! Det er meget praktisk hvis du ikke på forhånd ved hvor mange elementer du får brug for.
Held og lykke
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.