Pointer



  • Hi,

    Kann mir jemand erklären was im folgenden Code das & (s. Kommentar) machen würde?

    #include <stdio.h>
    
    int main() {
    	char inp[10];
    	scanf("%s", inp);//Was bewirkt & vor inp?
    	printf("\n%s\n", inp);
    	printf("char:   %c\n", inp[1]);
    
    	return 0;
    }
    

    THX, Cream



  • Sorry, ich hatte einen kleinen schreibfehler im Kommentar.
    Jetzt stimmt's.



  • Nichts sinnvolles. Der Name eines Arrays alleine evaluiert ja schon zu einem Zeiger auf das erste Element. Ein zusätzlicher '&'-Operator würde aus dem 2. Argument von scanf() einen anderen, falschen Typen machen (nicht char* wie es %s erwartet, sondern char (*)[10]).

    Bei hohen Warnstufen sollte der Compiler das aber imho auch bemängeln.



  • Hi und Danke für die Antwort.
    Was ist denn char (*)[10] ? Ein 10 Pointer auf einen Pointer of char?
    Oder ein Pointer auf einen Pointer of char?



  • Ein Zeiger auf ein Array von 10 char.



  • Tim schrieb:

    Ein zusätzlicher '&'-Operator würde aus dem 2. Argument von scanf() einen anderen, falschen Typen machen (nicht char* wie es %s erwartet, sondern char (*)[10]).

    nö, ein & vor einem array-namen bewirkt genau gar nichts.

    char inp[10];
    char *p = &inp;  // ist das selbe wie..
    char *q = inp;   // ...das
    

    🙂



  • Ach net, du sinkst aber schnell. Erst flamen und trollen, und jetzt kannst nichtmal mehr C? Arme Sau 😞



  • Tim schrieb:

    Ach net, du sinkst aber schnell. Erst flamen und trollen, und jetzt kannst nichtmal mehr C? Arme Sau 😞

    probiers doch mal aus:

    char inp[10];
        char *p = &inp;  // ist das selbe wie..
        char *q = inp;   // ...das
        printf ("%p %p", p, q);  // <--- gleiche adresse
    

    🙂



  • Dass die Adresse identisch ist, ist keinn Wunder. Aber es sind unterschiedliche Typen. Schalt doch einfach mal die Warnstufen an/höher 🙄



  • Tim schrieb:

    Aber es sind unterschiedliche Typen.

    ach das meinst du. tut mir leid, dann hab' ich dich missverstanden.
    🙂



  • Tim schrieb:

    Ein Zeiger auf ein Array von 10 char.

    Und worin besteht der Unterschied zu char* ?
    Es fällt mir schwer das nachzuvollziehen.
    Am Ende zeigt der Zeiger doch trotzdem auf die selbe Adresse...
    Kann ich mir das folgendermaßen vorstellen?
    char* adressiert nur einen Charakter und char (*)[10] gleich alle
    10, bzw. das ganze Array?



  • Cream schrieb:

    Kann ich mir das folgendermaßen vorstellen?
    char* adressiert nur einen Charakter und char (*)[10] gleich alle
    10, bzw. das ganze Array?

    So in etwa. Lass dir doch mal die Adressen eines char* und eines char (*)[10] anzeigen, und dann beide noch inkrementiert.


Anmelden zum Antworten