Leicht Verwirrt - Zeiger



  • Guten Abend,
    und zwar habe ich ein kleines Problem.
    Ich hatte Anfangs einen Zeiger der Speicher dynamisch reserviert hatte:

    b = calloc(strlen(buf)+1,sizeof(char));
    

    Diesen Zeiger habe ich dann einer Funktion übergeben:

    int split(void* message);
    

    Jetzt hatte ich vor der Funktion eine Struktur zu übergeben:

    typedef struct {
      char name[50];
      char straße[50];
      char ort[50];
      char plz[50];
      char nr[50];
      char *ptr; //soll auf b zeigen
    }daten
    

    Jetzt hatte ich vor ptr die Adresse von b zu übergeben:

    info.ptr = &b;
    

    Jetzt erhalte ich aber immer eine Warnung:

    warning C4047: '=' : 'char *' differs in levels of indirection from 'char ** '

    Wie behebe ich diese Warnung?
    Und wenn ich mit ptr in der split() Funktion rechne dann wird ja mit dem wert gerechnet auf den b zeigt oder?
    Also rechne ich in der split() Funktion dann mit den Orginal Werten? (Wenn der Wert in split() geändert wird dann wird der Wert auch in der main() geändert)
    Stimmt das so?
    Hoffe ich habe euch nicht zuu sehr verwirrt.
    😃



  • > Wie behebe ich diese Warnung?

    Indem du das '&' wegnimmst. Das ist die Adresse des Zeigers.



  • wie es Ad aCTa schon gesagt hat, der Adressoperator (&) muss weg, da b ja schon ein Zeiger ist. wenn du den Adressoperator da lässt, bekommst du die Adresse von deinem Pointer b, und nicht die Adresse auf die b "zeigt" (denn die Adresse auf die b zeigt ist ja der Wert von b, und nicht die Adresse von b)

    Und wenn ich mit ptr in der split() Funktion rechne dann wird ja mit dem wert gerechnet auf den b zeigt oder?
    Also rechne ich in der split() Funktion dann mit den Orginal Werten? (Wenn der Wert in split() geändert wird dann wird der Wert auch in der main() geändert)
    Stimmt das so?

    das ist korrekt, du greifst mit Pointern ja direkt auf den Speicher zu.


Anmelden zum Antworten