[gelöst] sizeof-Operator und Feld an Funktion übergeben

Du bist neu in der Welt von C++? Dann schau hier herein!
Antworten
gelignite
Beiträge: 37
Registriert: 6. Dezember 2007 21:23
Kontaktdaten:

[gelöst] sizeof-Operator und Feld an Funktion übergeben

Beitrag von gelignite »

Hallo,

ich stehe gerade auf dem Schlauch. Ich muss, als der Stoff behandelt wurde, krank gewesen sein. Ich habe folgendes Problem, zu dem mir keine Erklärung einfällt:

Code: Alles auswählen

#include <stdio.h>

void anzahlFeldelemente( int * feld )
{
                int * lokalesFeld = feld;
                printf( "\nAnzahl Elemente im Feld: %d\n", sizeof( lokalesFeld ) / sizeof( lokalesFeld[0] ));                 /* Ausgabe: 1, für mich falsch */
                printf( "\nlokalesFeld[ 5 ]: %d\n", lokalesFeld[ 5 ] );                                                                                /* Ausgabe: 5 */
}

int main( void )
{
                int einFeld[ 10 ] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
                printf( "\nAnzahl Elemente im Feld: %d\n", sizeof( einFeld ) / sizeof( einFeld[0] ));                                 /* Ausgabe: 10, korrekt */
                anzahlFeldelemente( einFeld );

                return 0;
}
In der Funktion habe ich dann probehalber auch das probiert, mit entsprechendem Ergebnis:

Code: Alles auswählen

                printf( "\nAnzahl Elemente im Feld: %d\n", sizeof( *lokalesFeld ) / sizeof( lokalesFeld[0] ));                /* Ausgabe: 1 */
                printf( "\nAnzahl Elemente im Feld: %d\n", sizeof( feld ) / sizeof( feld[0] ));                                           /* Ausgabe 1 */
                printf( "\nAnzahl Elemente im Feld: %d\n", sizeof( *feld ) / sizeof( feld[0] ));                                          /* Ausgabe: 1 */
Sizeof() liefert in der Funktion einen für mich nicht nachvollziehbaren Wert. Auf das Feld zugreifen kann ich, wie das Beispiel zeigt, aber die Anzahl der Elemente ermitteln nicht? Das geht mir nicht in den Kopf. Was übersehe ich?

Gruß,
gelignite
Zuletzt geändert von gelignite am 9. September 2008 13:53, insgesamt 1-mal geändert.
{brigens ist ein Kezboard/Treiber v;llig [berfl[ssig!
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Da "int *" ein Pointer ist wird sizeof() 4 oder 8 zurückgeben. Der Compiler kann an dieser Stelle nicht wissen was hinter dem Pointer steckt.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
gelignite
Beiträge: 37
Registriert: 6. Dezember 2007 21:23
Kontaktdaten:

Beitrag von gelignite »

Hallo,

Ich habe jetzt mal probehalber das Feld dynamisch angelegt via:

Code: Alles auswählen

int * einFeld = new int [ 10 ];
Da bekomme ich dann auch nur noch 1 als Ausgabe. (Wie nach deiner Aussage erwartet.)

Nachdem ich jetzt weiß wonach ich suchen muss, ist auch eine bekannte Suchmaschine relativ gesprächig. Danke. :-)

Gruß,
gelignite

P.S.: Für andere mit diesem Problem: (Stichwort: "cannot be used")
http://msdn.microsoft.com/en-us/library ... S.71).aspx


Edit: Der Link wird vom Board leider leicht zerschnitten.
{brigens ist ein Kezboard/Treiber v;llig [berfl[ssig!
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

C ist in dieser Hinsicht etwas doof - dafür emfpehle ich dann eher c++ std- oder Qt-Containerklassen.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Antworten