Sichtbarkeit/Zeiger problem



  • Hallo,

    ich habe folgenden c++ Code:

    void fill(int*);  
    void fill(int*arr)
    {
        for(int i=0;i<((sizeof (arr))/(sizeof (arr[0])));i++)
    		arr[i]=i;
    
    }
    
    int main()
    {
        int ii[10];
        fill(ii);
        for(int i=0;i<10;i++)
    		cout<<ii[i]<<" ";
    }
    

    Als Ausgabe kriege ich

    0 134519572 -1073743144 134513961 -1208160500 -1073743132 -1073743112 134514731 65535 -1209086880

    statt
    0 1 2 3 4 5 6 7 8 9
    😡

    wenn Ihr tipps habt, her damit. ich werd noch wahnsinnig...



  • void fill(int *i, int anzahl)
    {
        int iCount;
    
        for(iCount=0;iCount<anzahl;iCount++,i++)
        {
           i*=iCount;
        }
    }
    

    so würd ich es machen



  • sizeof(arr) liefert dir sizeof(int*), da dass int[10]-array in einen int* konvertiert wurde.
    also entweder

    template <int N>
    void fill(int (&arr) [N])
    {
        for(int i=0;i<N;i++)
            arr[i]=i;    
    }
    

    oder die größe des arrays extra übergeben;
    oder erst gar kein solches array verwenden, sondern lieber std::vector oder boost::array.



  • Danke an alle, dachte mir man könnte mit dem Trick überall Array-Größe rausfinden..


Anmelden zum Antworten