Δημοσιεύτηκε: 12 Σεπ 2011, 13:01
από migf1
Star_Light έγραψε:
...
το μονο που ηταν λιγο αμφιλεγομενο ηταν το

struct_function(p) αλλα και παλι δεν δεχεται καποια τροποποιηση. Απλα ουσιαστικα λες στην συναρτηση να κληθει με βαση αυτη την διευθυνση που ειναι η διευθυνση της δομης απο την οποια θα εκτυπωσει στοιχεια...
ειμαι καπου λαθος?

Σε χάνω εδώ, δεν καταλαβαίνω τι εννοείς. Ο απλούστερος και συνιστώμενος τρόπος σκέψης είναι να σκέφτεσαι μεταβλητές και τύπους. Τυπικά η someone είναι μεταβλητή που έχει ως τύπο μια δομή, άσχετα αν συχνά για συντομία λέμε πως η someone είναι δομή... η someone είναι μεταβλητή που ο τύπος της είναι δομή struct person (ή Person αν το struct person το έχουμε κάνει typedef σε Person). Όπως λέμε π.χ όταν έχουμε: int n; ότι το n είναι ακέραιος, αλλά τυπικά το n είναι μεταβλητή που ο τύπος της είναι ακέραιος αριθμός.

Οπότε τη someone τη χρησιμοποιείς όπως όλες τις μεταβλητές, με μόνη διαφορά πως δεν έχει μια ενιαία τιμή, αλλά επιμέρους τιμές στα πεδία της. Όταν χρειάζεσαι να αναφερθείς σε κάποια επιμέρους τιμή της someone, τότε αν η someone είναι απλή μεταβλητή βάζεις .όνομα_πεδίου κολλητά στο όνομα της μεταβλητής σου, αλλιώς αν είναι δείκτης βάζεις ->όνομα_πεδίου κολλητά στο όνομα της μεταβλητής σου.

έγραψε:
Το
Κώδικας: Επιλογή όλων
(*p).age


ΟΚ το γραφουμε οπως το λες... αλλα το ιδιο πραγμα λεμε... :D
Eχεις καποιο λογο που προτιμας πιο πολυ αυτη τη γραφη???? (με τον τελεστη εμμεσης σχεσης)

Ένας λόγος είναι πως το παραπάνω χαρακτηρίζει προγραμματιστές που δεν τα έχουν αυτοματοποιήσει στο μυαλό τους. Άλλος λόγος είναι πως το p->age είναι πολύ πιο λιτό κι ευανάγνωστο, κάτι που ισχύει μεγενθυμένο στο: &p->age έναντι του: &( (*p).age )... και ισχύει ακόμα πιο μεγενθυμένο στο: p->q->age έναντι του: (*p).(*q).age ή ακόμα και του: p->buffer[i] έναντι του: (*p).buffer[i] και του: &p->buffer[i] έναντι του &( (*p).buffer[i] ).

Είναι δηλαδή σαν να με ρωτάς για ποιο λόγο προτιμάς γενικώς στους δείκτες τη γραφή: p αντί της: &(*p) ;)