Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » größe eines Arrays ermitteln

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
07.10.2004, 20:55 Uhr
Lensflare



Hallo.

Ich hab mit der suchfunktion leider nichts finden können, also schreib ich hier:

gibts irgendwas praktisches um die größe (anzahl der variablen) eines arrays zu ermitteln?
Ich brauche es um ein array zu deklarieren, das genau so gross ist wie ein anderes, dessen gösse ich nicht kenne.

ähm, noch was...
wenn ich die grösse dann kenne, wie mach ich mein array genauso gross? Weil ja folgendes nicht geht:

C++:
int a;

int array[a];



muss ich da was anderes als int nehmen?

Danke.
--
Wenn das Gehirn so einfach wäre, dass wir es verstehen könnten, wären wir so einfach, dass wir es nicht verstehen könnten.
(Emerson Pugh Trost)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
07.10.2004, 20:58 Uhr
(un)wissender
Niveauwart


Die Größe eines Array kann man nicht ermittlen, die muss man sich merken.
Tipp:
int * array = new int[a];
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
07.10.2004, 21:04 Uhr
~Fox
Gast



Zitat von (un)wissender:
Die Größe eines Array kann man nicht ermittlen, die muss man sich merken.


Falsch!


Code:
#include <stdio.h>

int main (void)
{
char array [80];
printf ("%d", (sizeof (array))/(sizeof (array[1])));
}


Dieser Post wurde am 07.10.2004 um 21:05 Uhr von Fox editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
07.10.2004, 21:12 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)


@Fox

Bei deinem Beispiel macht das aber wenig Sinn, da du ja weißt wie groß das Array ist

(un)wissender hat schon recht das Lensflare bei dem was er vor hat sich die Größe merken muss.
Bsp.:

C++:
#include <stdio.h>
#include <malloc.h>

int main (void)
{
    char *array;
    int i=0;
    scanf("%i",&i);
    array = (char*) malloc(i*sizeof(char));
    printf ("\n%d", (sizeof (array))/(sizeof (array[1])));
    free (array);
}



Es gibt allerdings unter Windows folgende Möglichkeit:


C++:
#include <stdio.h>
#include <malloc.h>

int main (void)
{
    char *array;
    int i=0;
    scanf("%i",&i);
    array = (char*) malloc(i*sizeof(char));
    printf ("\n%d", _msize(array));
    free (array);
}


 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
07.10.2004, 22:03 Uhr
~Fox
Gast



Zitat von Guybrush Threepwood:
@Fox

Bei deinem Beispiel macht das aber wenig Sinn, da du ja weißt wie groß das Array ist

(un)wissender hat schon recht das Lensflare bei dem was er vor hat sich die Größe merken muss.
Bsp.:

C++:
#include <stdio.h>
#include <malloc.h>

int main (void)
{
    char *array;
    int i=0;
    scanf("%i",&i);
    array = (char*) malloc(i*sizeof(char));
    printf ("\n%d", (sizeof (array))/(sizeof (array[1])));
    free (array);
}



Es gibt allerdings unter Windows folgende Möglichkeit:


C++:
#include <stdio.h>
#include <malloc.h>

int main (void)
{
    char *array;
    int i=0;
    scanf("%i",&i);
    array = (char*) malloc(i*sizeof(char));
    printf ("\n%d", _msize(array));
    free (array);
}





Aber ein anderer Anwender weis doch nicht wie groß der Array ist
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
07.10.2004, 22:14 Uhr
Lensflare



ok, ich kann jetzt bestimmen wie gross das array ist, aber beim versuch die grösse mit

C++:
int i=77;
array = (char*) malloc(i*sizeof(char));
printf ("%d", (sizeof (array))/(sizeof (array[0])));


festzulegen kommt als ergebnis nicht 77 sondern 4 raus (
--
Wenn das Gehirn so einfach wäre, dass wir es verstehen könnten, wären wir so einfach, dass wir es nicht verstehen könnten.
(Emerson Pugh Trost)

Dieser Post wurde am 07.10.2004 um 22:15 Uhr von Lensflare editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
07.10.2004, 22:35 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)



Zitat von Fox:
Aber ein anderer Anwender weis doch nicht wie groß der Array ist

Wozu sollte ein Anwender das auch wissen?!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
07.10.2004, 22:36 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)



Zitat von Lensflare:
ok, ich kann jetzt bestimmen wie gross das array ist, aber beim versuch die grösse mit

C++:
int i=77;
array = (char*) malloc(i*sizeof(char));
printf ("%d", (sizeof (array))/(sizeof (array[0])));


festzulegen kommt als ergebnis nicht 77 sondern 4 raus (

Wie bereits gesagt musst du dir die Größe merken
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
07.10.2004, 22:51 Uhr
Lensflare



pfff es liegt nicht an mir, weil ich ein array aus einer anderen quelldatei hab, die ich eingebungen hab. Und ich muss wissen wie gross das (der?) array ist.

meine arrays kann ich mir ja merken (bzw nachschauen wie gross die sind)

aber mal ne andere frage:
was passiert eigentlich bei free(array); ??
das array wird doch "gelöscht", aber wenn man die werte darin auslesen würde, bekäme man dann immer 0 ?
Wär nämlich praktisch, weil ich oft alle werte im array auf 0 rücksetzten will
--
Wenn das Gehirn so einfach wäre, dass wir es verstehen könnten, wären wir so einfach, dass wir es nicht verstehen könnten.
(Emerson Pugh Trost)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
07.10.2004, 22:56 Uhr
Hans
Library Walker
(Operator)


Hi,

das bei dem einen Programm 4 heraus kommt, erschien mir auch komisch, deshalb hab ichs selber mal ausprobiert. Ergebniss mit diesem Testprogramm:

C++:
#include <stdio.h>
#include <malloc.h>

int main (void)
{
  char *array;

/*  int i=99;
  array = (char*) malloc(i*sizeof(char));
  printf ("\nArraysize: %d\n", _msize(array)); */


   int i=77;
   array = (char*) malloc(i*sizeof(char));
   printf ("\nArraysize: %d\n", sizeof (array)/sizeof (array[0]));
   printf ("Arraypointer: %d\n", sizeof (array));
   printf ("Array[0]: %d\n", sizeof (array[0]));

   printf ("i: %d\n", i);


  free (array);
}



Code:
D:\borland\CommandLine\own>bcc32 arraysize.c
Borland C++ 5.5 for Win32 Copyright (c) 1993, 2000 Borland
arraysize.c:
Warning W8070 arraysize.c 22: Function should return a value in function main
Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland

D:\borland\CommandLine\own>arraysize

Arraysize: 4
Arraypointer: 4
Array[0]: 1
i: 77

D:\borland\CommandLine\own>



D.h. die Rechnung reduziert sich zu 4/1 was natürlich 4 ergibt; aber das eigentliche Ergebniss ist ja, das sizeof (array) eben nicht die Grösse des arrays liefert, sondern nur die Grösse des Zeigers dahin. Daraus folgt, das Du Dir die Arraygrösse selber merken musst. Das ist imho sowieso eine gute Idee, weil man es hier ja mit dynamischer Speicherverwaltung zu tun hat.

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.

Dieser Post wurde am 07.10.2004 um 22:59 Uhr von Hans editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: