Zeiger auf Array



  • Danke und wie kriege ich das hin, dass es auch mit Zeigern funktioniert?

    Im Prinzip genügt es mir, wenn ich die Anzahl der Elemente herausfinde.
    Wenn das auch ohne sizeof geht (auch in c?), dann würde ich das gerne wissen.



  • ...



  • das geht sogar ganz einfach und das auf 2 Arten, die eine klappt auch in C.

    std::vector<int> arr;
    arr.size(); //hier haste die Größe
    
    int arr[5];
    unsigned int groesse = 5; // heir ahste die Größe, die Variable nimmste dir halt immer mit und überall hin
    


  • Skym0sh0 schrieb:

    das geht sogar ganz einfach und das auf 2 Arten, die eine klappt auch in C.

    std::vector<int> arr;
    arr.size(); //hier haste die Größe
    

    Danke, das könnte beim nächsten C++ Projekt funktionieren.
    Momentan sitze ich aber an c Code.

    int arr[5];
    unsigned int groesse = 5; // heir ahste die Größe, die Variable nimmste dir halt immer mit und überall hin
    

    Das habe ich befürchtet.
    Ich will halt nicht extra Variablen mitrumschleppen, aber wenn es nicht anders geht, werde ich es wohl doch so machen müssen. 😞
    Es wäre schöner gewesen, wenn man das irgendwie dynamisch aus dem Zeiger gewinnen könnte.

    Mit nem Struct dürfte es wohl auch gehen, oder?



  • ...



  • sizeof schrieb:

    Momentan sitze ich aber an c Code.

    Und warum postest du dann im C++-Forum? 😕



  • sizeof schrieb:

    Mit nem Struct dürfte es wohl auch gehen, oder?

    Also in C würde ich mir wirklich ein struct basteln, was mir die Größe nachhält:

    typedef struct 
    {
    	int * ptr;
    	unsigned int size;
    }Array;
    

    Aber als C++'ler findet man sowas ungefähr so schön wie normale Menschen einen HipHopper ohen Swag und ohne Yolo-Motto...



  • Swordfish schrieb:

    sizeof schrieb:

    Mit nem Struct dürfte es wohl auch gehen, oder?

    😕 Zeig mal?

    Skym0sh0 war schneller.

    _matze schrieb:

    sizeof schrieb:

    Momentan sitze ich aber an c Code.

    Und warum postest du dann im C++-Forum? 😕

    Weil ich's auch für C++ wissen will, brauche ja beides, wenn auch nicht sofort.



  • sizeof schrieb:

    anzahl = sizeof(p1)/sizeof(int);

    sizeof(p1) ist nicht das, was du willst. Im ersten Fall müsstest du
    sizeof(*p1) schreiben; denn sizeof(p1) wird immer gleich sizeof(void*) und damit unabhängig von der Größe des referenzierten Arrays sein. sizeof(void*) ist groß genug, dass man sich darin eine Adresse merken kann.

    Für ein Array kannst du dir aber auch ähnlich wie hier einen eigenen Typen für Array-Referenzen bauen. Zu benutzen wär das dann so:

    void show(array_ref<const int> ar)
    {
      cout << "[";
      for (int i=0; i<ar.size(); ++i) {
        if (i>0) cout << ", ";
        cout << ar[i];
      }
      cout << "]\n";
    }
    
    int main()
    {
      vector<int> foo = {1,2,3,5,8};
      show(foo);
    }
    

    Im Wesentlichen funktioniert array_ref wie eine normale Lvalue-Referenz wobei allerdings die Länge des Arrays eine Laufzeiteigentschaft ist und ein array_ref von rohen Arrays, std::array und std::vector erzeugt werden könnte. Eine Konvertierung von array_ref<U> nach array_ref<T> sollte auch erlaubt werden, wenn U* nach T* konvertierbar ist und sizeof(U)==sizeof(T) gilt.

    Ich habe so etwas mal vor nicht allzu langer Zeit mit C++11 Mitteln zu Hause gebastelt und könnte die Implementierung bei Interesse demnächst mal online stellen. Im Moment sitz ich allerdings im Büro.



  • sizeof schrieb:

    Weil ich's auch für C++ wissen will, brauche ja beides, wenn auch nicht sofort.

    Ja, aber wie du merkst, wird dir hier ständig die std::vector-Variante empfohlen, mit der du in C wenig anfangen kannst. 😉


Anmelden zum Antworten