Array: Heap oder Stack?



  • CStoll schrieb:

    int* h_arr=malloc(100*sizeof(int)); //dynamisch erzeugt -> Heap
    

    der 'int *h_arr' auch? oder nur die 100 int's?
    🙂



  • Hast du den Zeiger per malloc() erzeugt? Nein - ergo steht der Zeiger ganz normal im Stack und enthält die Adresse eines Heap-Speicherblock.

    Edit: Und bitte versuch nicht, meinen Namen zu imitieren - denk dir lieber einen eigenen aus 😉



  • DStoll schrieb:

    der 'int *h_arr' auch? oder nur die 100 int's?
    🙂

    Natürlich nicht, da h_arr eine lokale Variable ist.

    Ich habe dein Smily schon verstanden, aber für die Anfänger wollte
    ich die Frage doch beantworten.

    Gruß mcr

    PS: Dies ist auch der Grund, dass C keine Variable per call-by-reference
    übergeben kann. Es ist immer alles call-by-value.



  • mcr schrieb:

    PS: Dies ist auch der Grund, dass C keine Variable per call-by-reference
    übergeben kann. Es ist immer alles call-by-value.

    was hat das damit zu tun?
    🙂



  • nichts!



  • EStoll schrieb:

    mcr schrieb:

    PS: Dies ist auch der Grund, dass C keine Variable per call-by-reference
    übergeben kann. Es ist immer alles call-by-value.

    was hat das damit zu tun?
    🙂

    Die Variablen in der Parameterliste werden ebenfalls als lokale
    Variablen angelegt.

    Aber es hat nichts weiter zu sagen.



  • mcr schrieb:

    Die Variablen in der Parameterliste werden ebenfalls als lokale
    Variablen angelegt.

    muss nicht. das weiterreichen von parametern an funktionen ist ein eigener mechanismus.
    🙂



  • CStoll schrieb:

    Edit: Und bitte versuch nicht, meinen Namen zu imitieren - denk dir lieber einen eigenen aus 😉

    ok, ich nehme "DorisDieKlinge". den gibts bestimmt noch nicht.



  • mcr schrieb:

    PS: Dies ist auch der Grund, dass C keine Variable per call-by-reference übergeben kann. Es ist immer alles call-by-value.

    Hallo,
    was heisst bei "C" .. ist das unter C++ anders?

    Ich habe immer eine "lokale" Variable in den Funtkionsparametern (auch wenn diese als Pointer definiert ist und somit auf dem Stack liegt) oder meinst du etwas anderes?

    Wenn ich z.B. ein char-array an eine Funktion übergebe, dann ist das immer ein call-by-reference... auch in C... oder verstehe ich dich falsch?

    Gruß
    codefrag



  • codefrag schrieb:

    Wenn ich z.B. ein char-array an eine Funktion übergebe, dann ist das immer ein call-by-reference... auch in C...

    logisch gesehen ist es 'call by reference'. technisch gesehen wird bei der übergabe der wert des pointers kopiert.
    🙂



  • codefrag schrieb:

    was heisst bei "C" .. ist das unter C++ anders?

    void cpp_function(type& by_reference);
    void cpp_function(type* by_value);
    void cpp_function(type*& by_reference);
    


  • IStoll schrieb:

    codefrag schrieb:

    Wenn ich z.B. ein char-array an eine Funktion übergebe, dann ist das immer ein call-by-reference... auch in C...

    logisch gesehen ist es 'call by reference'. technisch gesehen wird bei der übergabe der wert des pointers kopiert.
    🙂

    Ja wie schon gesagt... die Übergabevariable (Pointer) liegt ja auf dem Stack.

    Mir war nur nicht bewusst das es unter C++ anders geht 😉



  • codefrag schrieb:

    Mir war nur nicht bewusst das es unter C++ anders geht

    c++ hat noch diese starren compile-time referenzen (mit dem & vorweg). ich nehme an die wurden erfunden, damit die sache mit den templates und operatorüberladung halbwegs funzt. pointer unter c++ sind eigentlich (mit gewissen ausnahmen) das selbe wie in C.
    🙂


Anmelden zum Antworten