hiendakias Δημοσ. 21 Ιανουαρίου 2012 Δημοσ. 21 Ιανουαρίου 2012 Καλημερα φιλοι μου, θελω μια βοηθεια σχετικα με c++ που κανουμε στο τει.Μας εκαναν μαθημα στους δεικτες (pointers), εχω καταλαβει οτι δειχνουν σε μια θεση μνημης μιας μεταβλητης και ξερω να τους χρησιμοποιω οσον αφορα την δηλωση τους ,την εκτυπωση στην οθονη της θεσης μνημης οπως και της ιδιας της τιμης της μεταβλητης που αντιπροσωπευουν.Ομως δεν καταλαβαινω γιατι να χρησιμοποιω την τιμη μιας μεταβλητης μεσω δεικτη και οχι απευθειας απο την ιδια της μεταβλητη ?. Ποια η ουσιαστικη χρησιμοτητα τους ?.
Chris92 Δημοσ. 21 Ιανουαρίου 2012 Δημοσ. 21 Ιανουαρίου 2012 Καλημερα,νομιζω οτι τους δεικτες τους χρησιμοποιουν κυριως σε συναρτησεις.Αν δεν κανω λαθος στις συναρτησεις,μπορεις να βαλεις ως εισοδο οσες μεταβλητες θες,αλλα ως εξοδο λαμβανεις μονο μια μεταβλητη.Οποτε χρησιμοποιωντας τους δεικτες και τις θεσεις μνημης μπορεις να παιρνεις ουσιαστικα ως εξοδο τιμες πολλων μεταβλητων.Περιπου κατι τετοιο παιζει
migf1 Δημοσ. 21 Ιανουαρίου 2012 Δημοσ. 21 Ιανουαρίου 2012 Μπορείς να ρίξεις μια ματιά σε αυτή την εξαιρετική σελίδα: http://www.newty.de/fpt/index.html, παρόλο που αναφέρεται σε C. Οι πιο συχνές χρήσεις των δεικτών σε C είναι α) για ας την πούμε προσομοίωση του pass-by-reference στα ορίσματα των συναρτήσεων, β) για callbacks (δες για παράδειγμα την τεκμηρίωση της συνάρτησης qsort() ) γ) για υλοποίηση abstract data types ή generic data types (χρήση του void *) δ) encapsulation μέσω incomplete types. Xωρίς δείκτες δεν θα μπορούσες να φτιάξεις για παράδειγμα έναν memory viewer/editor (η αριθμητική δεικτών είναι ευλογία σε αυτή την περίπτωση, αλλά οχι μόνο). Ελπίζω το link που σου δίνω να σε βοηθήσει να καταλάβεις τη χρησιμότητα τους. Στη C++ είναι μικρότερη η σημασία τους, γιατί η γλώσσα παρέχει high-level λειτουργίες που λείπουν από τη C (όπου αναγκαστικά τις υλοποιείς με δείκτες). EDIT: Ρίξε μια ματιά και στην ίδια ερώτηση με τη δική σου, σε ένα γνωστό ξένο φόρουμ: http://stackoverflow...hy-use-pointers
Erevis Δημοσ. 21 Ιανουαρίου 2012 Δημοσ. 21 Ιανουαρίου 2012 Στη C++ οι pointers έχουν τεράστια σημασία. Μερικά παραδείγματα: -Χρησιμοποιούνται για να ελέγξουμε το lifetime ενός object. -Για να βάλουμε οbjects κλάσης που δεν είναι copyable σε STL containers. -Dynamic memory allocation όπως και στη C. -Κυριότερο, ο μηχανισμός υλοποίησης του πολυμορφισμού στη C++ γίνεται μέσω pointers. -Ακραιό, πολλές φορές, για εφαρμογές που χρειάζονται πολύ καλή διαχείριση της μνήμης (π.χ κονσολοπαίχνιδα ή προγράμματα που τρέχουν σε embedded περιβάλλοντα) είναι αναγκαίο να γραφτεί κάποιος custom allocator για να μη γίνεται κατακερματισμός του free-store. Guess-what, pointers.
migf1 Δημοσ. 21 Ιανουαρίου 2012 Δημοσ. 21 Ιανουαρίου 2012 Παραμένει όμως μικρότερη η σημασία τους από ότι στη C Ίσως "αναγκαιότητα" είναι καλύτερη λέξη, υπό την έννοια πως υπάρχουν λειτουργίες που στη C++ μπορούν να γίνουν χωρίς χρήση δεικτών, ενώ στη C είναι μονόδρομος.
Star_Light Δημοσ. 21 Ιανουαρίου 2012 Δημοσ. 21 Ιανουαρίου 2012 Πιστευω για ταχυτερη εκτελεση. Μιας και έχεις άμεση αλληλεπιδραση με το υλικο.
Erevis Δημοσ. 21 Ιανουαρίου 2012 Δημοσ. 21 Ιανουαρίου 2012 Παραμένει όμως μικρότερη η σημασία τους από ότι στη C Ίσως "αναγκαιότητα" είναι καλύτερη λέξη, υπό την έννοια πως υπάρχουν λειτουργίες που στη C++ μπορούν να γίνουν χωρίς χρήση δεικτών, ενώ στη C είναι μονόδρομος. Όχι, είναι το ίδιο σημαντικοί. Όλα αυτά που έγραψα (αν εξαιρέσεις το τελευταίο), κυρίως ο πολυμορφισμός και η διαχείρηση του lifetime των objects, είναι απαραίτητα για να γραφτεί σοβαρό λογισμικό σε C++.
Directx Δημοσ. 21 Ιανουαρίου 2012 Δημοσ. 21 Ιανουαρίου 2012 Όχι, είναι το ίδιο σημαντικοί. Όλα αυτά που έγραψα (αν εξαιρέσεις το τελευταίο), κυρίως ο πολυμορφισμός και η διαχείρηση του lifetime των objects, είναι απαραίτητα για να γραφτεί σοβαρό λογισμικό σε C++. Σωστά αλλά για τον πολυμορφισμό εξαρτάται από τις ανάγκες της κάθε εφαρμογής, δεν είναι απαραίτητος (σε αντίθεση με τους δείκτες που συνήθως χρειάζονται πολύ περισσότερο).
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα