Pointer bei Arrays: Fehler bei der Ausgabe
-
Hallo!
Habe leider ein kleines Problem bei der Verwendung von Arrays mit Pointer.
Folgenden (Test)-Code verwende ich:#include <stdio.h> #include <stdlib.h> int main() { /* Pointer */ int *ptr; /* sonstige Variablen */ int i; /* Array */ // int array[10] = {1, 2, 4, 8, 16, 32, 64, 128, 256, 512}; /* ANSI Standard - Keine Funktion mit cc-Compiler von HP-UX */ /* HP-UX Variante mit CC-Compiler */ int array[10]; array[0]=1; array[1]=2; array[2]=4; array[3]=8; array[4]=16; array[5]=32; array[6]=64; array[7]=128; array[8]=256; array[9]=512; /* zeige nun auf das Array... */ ptr=array; for(i=0; i<array[i]; i++) { printf("\nElemente des Arrays: \t[%2d] => [%3d]...", i, *(ptr+i)); } printf("\n\n"); return EXIT_SUCCESS; }
Bei der Ausgabe werden die Elemente des Arrays sauber durchlaufen, allerdings zwei Elemente mehr als die definierten 10 Elemente.
Hat jemand eine Ahnung warum?Hier die Ausgabe:
Elemente des Arrays: [ 0] => [ 1]... Elemente des Arrays: [ 1] => [ 2]... Elemente des Arrays: [ 2] => [ 4]... Elemente des Arrays: [ 3] => [ 8]... Elemente des Arrays: [ 4] => [ 16]... Elemente des Arrays: [ 5] => [ 32]... Elemente des Arrays: [ 6] => [ 64]... Elemente des Arrays: [ 7] => [128]... Elemente des Arrays: [ 8] => [256]... Elemente des Arrays: [ 9] => [512]... Elemente des Arrays: [10] => [134217759]... Elemente des Arrays: [11] => [134217759]...
Wahrscheinlich stehe ich auch auf dem Schlauch, aber ich sehe den Fehler nicht...
Wenn ich innerhalb der for-Schleife die Zählweise ändere infor(i=0; i<10; i++)
erhalte ich das richtige Ergebnis.
Aber wieso erhalte ich dieses Ergebnis nicht mit der anderen Variante (for(i=0; i<array[i]; i++)
?
Danke,
Tom.
-
Hab jetzt den Fehler gefunden, sorry für den Post:
size=sizeof(array)/sizeof(int)
Den size-Wert dann innerhalb der for-Schleife verwenden, dann klappt es auch...
Danke,
Tom.
-
int array[10]; array[0]=1; array[1]=2; array[2]=4; array[3]=8; array[4]=16; array[5]=32; array[6]=64; array[7]=128; array[8]=256; array[9]=512;
kannst dafür auch eine schleife benutzen