takis_tz Δημοσ. 27 Μαΐου 2008 Δημοσ. 27 Μαΐου 2008 Μπορεί κάποιος να μου εξηγείσει τι συμβαίνει στο πιο κάτω κώδικα; Πως απεικονίζεται στην μνήμη του υπολογιστή; int x=1, y=2, z[10]; int *ip, *iq; ip=&x; *ip=*ip+1; y=*ip+x+1; ip=&z[7]; iq=ip;
georgemarios Δημοσ. 27 Μαΐου 2008 Δημοσ. 27 Μαΐου 2008 > 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 δεικτες "δειχνουν" στην ιδια θεση μνημης.... αυτα....
takis_tz Δημοσ. 27 Μαΐου 2008 Μέλος Δημοσ. 27 Μαΐου 2008 Σε ευχαριστώ πολύ. Ήταν αναλυτικότατη η εξήγησή σου.
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.