Pointer Zeiger und Co -- ArrayPointer an eine Funktion übergeben



  • Hi Leute

    Ich wollte fragen ob mir jemand erklären könnte wie ich in folgendem Code
    die Daten aus anf nach end bekomme 🙂

    Bin jetzt schon ewig am rumcasten aber bekomms nicht hin...

    Vielen Dank

    #include <iostream>
    using namespace std;
    
    void bla(int*);
    
    int main(void)
    {
     int end[128];    
     cout << end[0] << endl
          << end[1] << endl; 
     fflush(stdin);
     cin.get();    
     return 0;    
    }
    
    void bla(int* zw)
    {
     int anf[128] = {55,2,3,4,5,6,7}; 
     // ? => memcpy(zw,anf,sizeof(int));
    }
    


  • MemCPY schrieb:

    Hi Leute
    Bin jetzt schon ewig am rumcasten aber bekomms nicht hin...

    hmm warum am rumcasten?

    #include <iostream>
    using namespace std;
    
    void bla(int *zw);
    
    int main(void)
    {
       int end[128];
       int *p = end;
    
       bla(p);
       return 0;
    
    }
    
    void bla(int *zw)
    {
     int anf[128] = {55,2,3,4,5,6,7}; 
     memcpy(zw,anf,sizeof(anf));     // 1. Möglichkeit
     memcpy(zw,anf,sizeof(int)*128); // 2. Möglichkeit
    
    }
    

    Ohne gewähr auf Syntaxkorrektheit 😉 einfach mal schnell im Notepad getippt.
    😃



  • Danke,
    aber kann man auch einzelne Elemente kopieren? 🙂

    mfg



  • MemCPY schrieb:

    Danke,
    aber kann man auch einzelne Elemente kopieren? 🙂

    mfg

    zw[a] = anf[b]; // a und b sind Platzhalter ;)
    


  • Thx 😉



  • MemCPY schrieb:

    Danke,
    aber kann man auch einzelne Elemente kopieren? 🙂

    Hi,
    na klar... aber bevor ichs vergess...

    cout << end[0] << endl
          << end[1] << endl;
    

    ... ist kein ANSI-C... cout kommt aus C++. Wenn du ein C-Programm erstellen willst, dann nimm printf().

    So und nun zum einzelnen Elemente kopieren, der Pointer zw zeigt auf die Anfangsspeicheradresse des int Arrays. Du kannt dich als mit zw+n Eintrag für Eintrag durchhangeln.

    void bla(int *zw)
    {
     int anf[128] = {55,2,3,4,5,6,7};
     int *local_p = anf;
     *(zw++);          // 2.ter Eintrag aus Ziel-Array
     *(local_p++);  // 2.ter Eintrag aus Quell-Array
     memcpy(zw,local_p,sizeof(int));
    }
    

    @AJ: Dann isses aber ohne memcpy 😋



  • ...
    fflush(stdin);
    ...
    

    😕 Eingabepuffer flushen? Was soll das bringen?



  • Ja ich weiß das es kein ANSI C ist 😉

    fflush soll bewirken das nicht ein zuvor eingegebens Zeichen mit cin.get eingelesen wird



  • Undefinierte Aktionen auf C-Streams und das ganze noch bunt gemischt mit C++-Streams, so haben wir es gern 😃


Anmelden zum Antworten