Zeiger mal kurz erklären?



  • Hoffe einer könnte mir mal kurz die Zeiger erklären.
    Hab nen kleine Aufgabe bekommen, habe aber keinen Plan mehr von den Zeigern.
    Wäre schön, wenn mir das einer noch mal kurz erklären könnte...

    Danke!

    Aufgabe:

    int x[] = { 8,1,7,2,6,3,5,4,0,-1,1,-2,2,-3}
    int k = 2;
    int *z = &x[5];
    

    Welche Werte haben folgende Ausdrücke:

    1. *z+k
    2. *(z+k)
    3. z-x
    4. x[k+1]<<*z
    5. x[k+1]<*z
    6. x[k**z+3]**z+3

    Bei 1. würde ich als Ergebnis 5 sagen... aber dann habe ich ja net wirklich mit Zeigern gearbeitet, oder?



  • Richtig. Es ist 5. Und natürlich hast du mit Zeigern gearbeitet. z ist ein Zeiger.
    Was ist das Problem mit den anderen? Vielleicht das "<<"? Dann google mal nach bitshift oder bitoperationen. Evtl. nochmal ein Tutorial über Zeiger lesen.

    Ich habe den Rest jetzt bewusst nicht gelöst. Du sollst ja selber üben.



  • Soweit bin ich noch nicht mal...
    hänge schon bei 2. *(z+k).

    Die Klammer kommt für dem Zeiger, denke ich mal..
    z+k = 7 ?
    Zeiger auf [7]= 4 ??



  • Genau.



  • RedLeffer schrieb:

    Die Klammer kommt für dem Zeiger, denke ich mal..
    z+k = 7 ?
    Zeiger auf [7]= 4 ??

    Das Ergebnis stimmt zwar, aber nicht der Lösungweg. Denn z+k ist eine Adresse.

    Der Wert von z ist die Adresse des 6. Elements von x (Merke: Arrays werden immer beginnend mit 0 angesprochen). Addierst du einen Wert zu einem Zeiger, also einer Adresse, dann ist das Ergebnis wieder eine Adresse.

    Konkret in diesem Fall: z zeigt auf die 3 in dem array x. Wenn du dann 2 zu z addierst, ist das Ergebnis die Adresse des Elements in x, das 2 Elemente hinter z liegt. In diesem Fal ist das die 4. Dann greift (aufgrund der Klammer) erst der Dereferenzierungsoperator *, welcher die Adresse in die Zahl 4 "umwandelt".



  • Ok, hoffe dann mache ich auch die 3 richtig...

    3. z-x

    x=3, z steht auf 6. Element vom Array

    Ergebnis 7?



  • Leider nein. z und x sind beidesmal Adressen. Wenn man von einer Adresse eine andere abzieht, dann ist das Ergebnis quasi der "Abstand" beider Adressen. Next try 😉

    PS: Schau dir wirklich mal ein Tutorial über Zeigerarithmetik an. Das ist für Anfänger immer heftig, aber eben auch absolut wichtig für C.



  • Hast du zufällig so nen Tutorial mal parat??
    Danke erstmal!



  • Ist dann bei 3. der Abstand 3?
    Irgendwie verstehe ich das nicht...



  • http://www.pronix.de/pronix-623.html

    Afaik werden da Zeiger ganz gut erklärt.

    Zu 3.: Nein, der "Abstand" (ist wohl ein doofes Wort dafür, mir ist aber nichts besseres eingefallen) ist hier 5.

    z ist &x[5]
    x ist &x[0] (z und &z[0] sind äquivalent)

    Der nackte Name eines Arrays ist gleichbedeutend mit der Adresse des 1. Elements...

    Viel Spass beim büffeln 😉



  • Danke! Habe ich am Wochenende nen bissel was zu tun 😃


Anmelden zum Antworten