Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Eisbär

Frischling

  • »Eisbär« ist der Autor dieses Themas

Beiträge: 5

Beruf: Schüler

  • Private Nachricht senden

1

05.06.2007, 22:36

Array - Größe ermitteln

Wenn ich ein Array so erstelle:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void Groesse_berechnen(int *Array)
{   cout << sizeof(*Array);
     // hier brauch ich die Größe, bei meiner eigentlichen Funktion sonst zu viele Funktionsparameter

} //hab´s auch ohne Stern probiert

    
int main()
{
    int x = 0;
    int *Array1;
    cin >> x;
    Array1 = new int[x];
    cout << "\n";
    Groesse_berechnen(Array1);
    cout << "\n\n";
    return 0;
}


dann bekomme ich immer die gleiche Zahl (4).
Ist das die Größe des Pointers (sprich des Arrays) und wie krieg ich die Größe raus?

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

2

05.06.2007, 22:42

Garnicht (bzw nur auf Umwegen). Verwend lieber einen Vektor.
@D13_Dreinig

Ba'el

Alter Hase

Beiträge: 409

Wohnort: Erfurt

Beruf: Student (6 FS angew. Info. - Richtung Medieninformatik)

  • Private Nachricht senden

3

06.06.2007, 17:26

auf einem 32-Bit System ist die Größe eines Pointers immer 32 Bit, sprich 4 Byte, egal ob das ein short*, double*, oder irgend ein anderer Datentyp ist
aktuelle Projekte:
Ruby on Rails
XNA &amp; Touchless
Progr. mobiler Endgeräte (GPS Trekking)

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

4

06.06.2007, 17:30

Zitat von »"Ba'el"«

auf einem 32-Bit System ist die Größe eines Pointers immer 32 Bit, sprich 4 Byte, egal ob das ein short*, double*, oder irgend ein anderer Datentyp ist


Was hat das mit dem Thema zu tun?
@D13_Dreinig

Ba'el

Alter Hase

Beiträge: 409

Wohnort: Erfurt

Beruf: Student (6 FS angew. Info. - Richtung Medieninformatik)

  • Private Nachricht senden

5

06.06.2007, 17:38

Re: Array - Größe ermitteln

Zitat von »"Eisbär"«


...
dann bekomme ich immer die gleiche Zahl (4).
Ist das die Größe des Pointers ... ?
aktuelle Projekte:
Ruby on Rails
XNA &amp; Touchless
Progr. mobiler Endgeräte (GPS Trekking)

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

6

06.06.2007, 17:40

Du hast was vergessen bei deinem Zitat:

Zitat


... (sprich des Arrays)


Er wollte in erster Linie wissen wieviel Elemente das Array erfassen kann.
@D13_Dreinig

Ba'el

Alter Hase

Beiträge: 409

Wohnort: Erfurt

Beruf: Student (6 FS angew. Info. - Richtung Medieninformatik)

  • Private Nachricht senden

7

06.06.2007, 17:57

OK, nochmal von vorn:

die Größe (4) die du rauskriegst, ist die Größe das Datentypen (int), da du ja beim sizeof(*Array) die Variable dereferenzierst.

für die Größe des gesamten Arrays braucht man nur

C-/C++-Quelltext

1
2
3
4
void Groesse_berechnen(int x)
{
    cout<<sizeof(int) * x<<endl;
}
aktuelle Projekte:
Ruby on Rails
XNA &amp; Touchless
Progr. mobiler Endgeräte (GPS Trekking)

Progater

Treue Seele

Beiträge: 119

Wohnort: BW

  • Private Nachricht senden

8

06.06.2007, 18:11

So weit ich weiss, muss man nur das _countof-Makro verwenden. Oder irre ich mich. ;)
Benötigter Header: <stdlib.h>
To go back to the drawing board is not everyone's cup of tea! :-)

Ba'el

Alter Hase

Beiträge: 409

Wohnort: Erfurt

Beruf: Student (6 FS angew. Info. - Richtung Medieninformatik)

  • Private Nachricht senden

9

06.06.2007, 18:33

_countof(Array) kann man aber nur bei Arrays anwenden die nicht mit new angelegt worden sind, also wo die Länge bei der Implementierung festgelegt worden ist zB int Array[5];
aktuelle Projekte:
Ruby on Rails
XNA &amp; Touchless
Progr. mobiler Endgeräte (GPS Trekking)

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

10

06.06.2007, 18:33

Zitat von »"Ba'el"«

OK, nochmal von vorn:

die Größe (4) die du rauskriegst, ist die Größe das Datentypen (int), da du ja beim sizeof(*Array) die Variable dereferenzierst.

für die Größe des gesamten Arrays braucht man nur

C-/C++-Quelltext

1
2
3
4
void Groesse_berechnen(int x)
{
    cout<<sizeof(int) * x<<endl;
}


Ich vermute mal das es ihn um den Wert 'x' ging.

Zitat von »"Progater"«

So weit ich weiss, muss man nur das _countof-Makro verwenden. Oder irre ich mich. ;)
Benötigter Header: <stdlib.h>


Das Macro ist weder Portabel noch für dynamischen Speicher von nutzen. Für statische Arrays funktioniert das ganz wunderbar:

C-/C++-Quelltext

1
2
#define count_of( x ) \
    ( sizeof( x ) / sizeof( x[ 0 ] ) )


Aber halt auch nur für statische Arrays. Bei Speicher der dynamisch reserviert wurde (malloc) gibts keine einfache Möglichkeit.
@D13_Dreinig

Werbeanzeige