[C/C++] Ein paar Fragen bzgl. Referenzen und Pointer

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von Coksnuss, 31. Januar 2009 .

Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. 31. Januar 2009
    Ein paar Fragen bzgl. Referenzen und Pointer

    Hallo,

    ich habe ein paar Fragen bezüglich pointern:

    1. Call by Reference im Aufruf!
    In PHP ist es sowohl möglich eine Referenz in der Funktionsdeklarierung als auch im Funktionsaufruf zu übergeben.

    Bsp 1 (Referenz in Funktionsdeklarierung):
    PHP:
    <? php
    function  test (& $i )
    {
      
    $i  1 ;
    }

    $i  0 ;
    test ( $i );
    echo 
    $i // 1
    ?>
    Bsp 2 (Referenz in Funktionsaufruf):
    PHP:
    <? php
    function  test ( $i )
    {
       
    $i  =   1 ;
    }

    $i  0 ;
    test (& $i );
    echo 
    $i // 1
    ?>
    So.. in C++ hab ich den Code aus Beispiel 1 auch hinbekommen, aber den aus Beispiel nummer 2 bekomme ich nicht hin....
    Bei folgendem Code meckert der compiler...
    Code:
    ...
    void test(uint i)
    {
     i = 2;
    }
    
    int main()
    {
     uint i = 1;
    
     test(&i);
    
     cout << i;
     cin >> i;
    
     return 0;
    }
    
    Compiler meckert:
    Code:
    cannot convert parameter 1 from 'uint *' to 'uint'
    Das verstehe ich auch aber wenn ich das ändern wollte müsste ich ja so vorgehen wie in Beispiel 1. Gibt es da keine Möglichkeit wie in PHP beim Funktionsaufruf gleich die Referenz zu übergeben?

    ------------------

    2. Deklarierung von Pointern

    So... Dann habe ich noch ein kleines Verständnis Problem in Sachen deklarierung von pointern.
    Irgentwie gibt es da ja zig Schreibweisen wo man das "*" macht...
    Bsp:
    Code:
    uint* i;
    uint * i;
    uint *i;
    
    scheint irgentwie alles das selbe zu bewirken und ist wohl auch alles gültiger C++ code.
    Gibts da irgenteine Schreibweise bei der "gepflegten" Programmierung die "richtiger" ist als die anderen?

    Oder das hier:
    Code:
    int* temp, * start;
    ;

    Nach meinem Verständnis werden alle Variablen nach "int*" als Pointer deklariert... Oder etwa nur die 1. Nachfolgende (in dem Fall "temp") und alle weiteren als "int"?

    Wenn ich Recht habe, wieso steht dann nochmal ein "*" vor "start"?....
    // Edit: Habe grade gesehen das es ja auch die Möglichkeit eines "Doppelten" Zeigers gibt...
    // Ist "start" in dem Fall solch einer?

    -------------

    3. Casting auf Pointer / Adressen.
    Gibt es noch andere Schreibweisen für das casting von Pointern als diese hier:
    Code:
    (int*) a;
    
    Wäre dankbar für ein bisschen Aufklärung =)
     
  2. 1. Februar 2009
    1. In C++ gibts die Zweite Schreibweise nicht. Es liegt einzig und allein an einer funktion ob sie ne Referenz will oder nicht. Der &-Operator in Verbindung mit ner Variablen liefert deren Adresse zurück. So kann man sie z.B. in nem Pointer speichern:

    Code:
    int var = 0;
    int *pVar = &var; //pVar zeigt jetzt auf var
    2. Wie du schon erkannt hast, bewirken die Schreibweisen alle das gleiche. Was man verwendet hängt eigentlich vom persöhnlichen Stil ab, wobei C++-Programmierer eher "int* a" nehmen und C-Programmierer eher "int *a".
    Wenn man mehrere Variablen in einer Anweisung deklariert bezieht sich der * nur immer auf eine Variable:

    Code:
    int* a, b, c; //a ist ein int-pointer, b und c normale ints
    int *a, *b, *c; //a, b und c sind pointer
    3. In C++ gibts noch static_cast<>() und reinterpret_cast<>(). In C gibts nur oben genannte Version, die man aber in C++ vermeiden sollte.
     
  3. 1. Februar 2009
    Super! Vielen Dank hat mir sehr geholfen!

    Aber wo liegt der unterschied zwischen einem "int-pointer" und "normalen pointern"?
    Bzw. auf welchen Datentyp zeigen den die Pointer "b" und "c" aus deinem Beispiel?
     
  4. 1. Februar 2009
    Naja, es gibt keine "normalen pointer". War vllt. etwas missverständlich von mir ausgedrückt. Ein Pointer zeigt immer auf den selben Datentyp wie in der Deklaration angegeben. Soll heißen, int* zeigt auf einen int, char* auf einen char etc.
    In dem Beispiel zeigen a, b und c also auf ints.
     
  5. 1. Februar 2009
    Schnelle Antwort =)...
    Aber wenn a, b und c alles die "selben" pointer sind wieso schreibst du im Kommentar dann
    Code:
    int* a, b, c; //a ist ein int-pointer, b und c normale pointer
    Also das hört sich so an als ob a ein anderer Pointer ist als b und c...
     
  6. 1. Februar 2009
    Es muss natürlich heißen: a ist ein int-pointer, b und c normale ints.
     
  7. 1. Februar 2009
    Ach damn, was bin ich heute wieder verwirrt -_-
    meinname hat natürlich recht ^^
     
  8. 1. Februar 2009
    Achsooooo ok danke euch beiden =)
     
  9. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.