Προς το περιεχόμενο

Δείκτες


takis_tz

Προτεινόμενες αναρτήσεις

Δημοσ.

Μπορεί κάποιος να μου εξηγείσει τι συμβαίνει στο πιο κάτω κώδικα;

Πως απεικονίζεται στην μνήμη του υπολογιστή;

 

int x=1, y=2, z[10];

int *ip, *iq;

ip=&x;

*ip=*ip+1;

y=*ip+x+1;

ip=&z[7];

iq=ip;

Δημοσ.

> int x=1, y=2, z[10];

οριζονται ο ακεραιος x με αρχικη τιμη 1, ο y με 2 και ο z πινακας ακεραιων 10 θεσεων

> int *ip, *iq;

οριζονται δυο pointers (δεικτες) o ip και ο iq.

Ειναι φτιαγμενοι για να "δειχνουν" σε ακεραιες (int) μεταβλητες. Λεγοντας "δειχνουν" εννοουμε οτι κρατανε ως τιμη την διευθυνση μνημης στην οποια θα ειναι αποθηκευμενος ο ακεραιος

> ip=&x;

ο ip παιρνει ως τιμη την διευθυνση μνημης που ειναι αποθηκευμενος ο x. Δηλ πλεον "δειχνει" στον x

>*ip=*ip+1;

προσοχη εδω...

η ακεραια τιμη που βρισκεται στη θεση μνημης που ειναι αποθηκευμενη στον ip αυξανεται αυξανεται κατα 1.

αυτη η διευθυνση, ειναι η διευθυνση του x αφου αποθηκευτηκε στον ip στο προηγουμενο βημα. Αρα στην ουσια αυτο που μολις εγινε ισοδυναμει με το να λεγαμε

χ = χ+1

και επειδη το χ ειχε ηδη την τιμη 1, τωρα θα ειναι 2

 

>y=*ip+x+1;

με την ιδια λογικη, το παραπανω ισοδυναμει με

y = x + x + 1 = 2 + 2 + 1 = 5

 

> ip=&z[7];

εδω ο ip παιρνει την διευθυνση μνημης του 8ου στοιχειου του πινακα z (θυμισου, το 1ο στοιχειο ειναι το z[0]).

just for the record, επειδη τα στοιχεια του z ειανι διαδοχικα στη μνημη, το παραπανω θα μπορουσε να γραφτει και ως

ip = &z[0]+7 (δηλαδη η διευθ μνημης του πρωτου στοιχειου συν 7 ακομα)

η ποιο απλα

ip = z + 7 (επειδη η διευθυνση μνημ του z ειανι αυτη του 1ου στοιχειου του)

 

> iq=ip;

εδω ο iq παιρνει την τιμη του ip ( που ειναι η διευθ μνημης του 7ου στοιχειου του z)

τωρα και οι 2 δεικτες "δειχνουν" στην ιδια θεση μνημης....

 

 

αυτα....

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...