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 in

    for(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


Anmelden zum Antworten