Avatar billede codewarrior2000 Nybegynder
03. maj 2001 - 23:19 Der 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?
Avatar billede alquesm Nybegynder
04. maj 2001 - 00:01 #1
Ø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\'!? ;)

Håber at jeg har svaret på dit spørgsmål! :)
Avatar billede jespernaur Nybegynder
04. maj 2001 - 00:22 #2
Lyt ikke til alquesm!!

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.
Avatar billede alquesm Nybegynder
04. maj 2001 - 07:53 #3
Ø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
Avatar billede alquesm Nybegynder
04. maj 2001 - 07:54 #4
\"I C++ kan du finde størrelsen i bytes af et array med sizeof der hvor du har erklæret det!\"

Du kan da bruge sizeof() lige præcis hvor du vil i din kode!
Avatar billede jpk Nybegynder
04. maj 2001 - 08:37 #5
=> 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...

Avatar billede codewarrior2000 Nybegynder
04. maj 2001 - 22:55 #6
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++);
Avatar billede alquesm Nybegynder
05. maj 2001 - 18:29 #7
jpk, du misforstod hvad jeg mente! :)

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! ;)
Avatar billede joha Nybegynder
06. maj 2001 - 03:30 #8
int cx = (sizeof(testarray) /sizeof(testarray[0]))

for (int i=0; i<cx; i++)
  testarray[i] = i;  // or whatever

Avatar billede alquesm Nybegynder
06. maj 2001 - 13:44 #9
Hmm... det havde jeg faktisk ikke tænkt på!
Skide smart Joha! :))
Avatar billede jpk Nybegynder
07. maj 2001 - 08:35 #10
=> 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
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester