Frage zu Zeigern



  • Hi,
    habe mal eine Frage zu Zeigern, denn ich mache
    das noch nicht so lange 😃
    Ich denke mal das Galileo OpenBook C ist nicht
    so dolle, aber ich lese es mit Vorbehalt, denn
    das von Python ist auch Müll.

    Aber folgendes Beispiel:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #define MAX 255
    
    char *eingabe(char *str) {
       char input[MAX];
       printf("Bitte \"%s\" eingeben: ",str);
       fgets(input, MAX, stdin);
       return strtok(input, "\n");
    }
    int main(void) {
       char *ptr;
       ptr = eingabe("Vorname");
       printf("Hallo %s\n", ptr);
       ptr = eingabe("Nachname");
       printf("%s, interssanter Nachname\n", ptr);
       return 0;
    }
    

    Warum muss es hier nicht

    printf("Bitte \"%s\" eingeben: ",*str);
    

    heißen?
    Vorher ging es ja auch folgendermaßen:

    int x=5;
    int *meinzeiger;
    meinzeiger = &x;
    printf("Wert von x = %d",*meinzeiger);
    

    Versteh ich nicht so ganz, wäre nett, wenn das
    mal jemand erläutern könnte 😕

    MfG Jonas 😉



  • talas schrieb:

    Warum muss es hier nicht

    printf("Bitte \"%s\" eingeben: ",*str);
    

    heißen?

    weil 'str' doch schon ein char* ist. ein '*str' würde nur das erste zeichen liefern. 'printf' braucht aber einen pointer, um den ganzen string auszugeben (bei %s jedenfalls).
    🙂



  • Also

    char *test;
    

    und

    char* test;
    

    doch dasselbe oder?
    D.h. ich übergebe der Funtkion
    ein CharArray und mit

    printf("%c",*str);
    

    könnte ich das erste Zeichen (Array[0]) ausgeben,
    auf das der Pointer zeigt?
    Soweit richtig 😃 ?

    MfG Jonas 😉
    PS: Danke für die flotte Antwort ~fricky



  • Exakt.



  • talas schrieb:

    Also

    char *test;
    

    und

    char* test;
    

    doch dasselbe oder?

    Klar. Leerzeichen werden vom Compiler nie beachtet und sind meist nur kosmetischer Schnickschnack. Wo du den Stern platzierst, ist Geschmacksache...



  • _matze schrieb:

    Klar. Leerzeichen werden vom Compiler nie beachtet und sind meist nur kosmetischer Schnickschnack.

    der vs2005 ist wohl ne ausnahme:

    int a = 1;
      int b = 2;
      int c = a++ + ++b;  // compiled
      int d = a+++++b;    // das nicht
    

    🙂


Anmelden zum Antworten