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

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

Δημοσ.

Καλημερα φιλοι μου, θελω μια βοηθεια σχετικα με c++ που κανουμε στο τει.Μας εκαναν μαθημα στους δεικτες (pointers), εχω καταλαβει οτι δειχνουν σε μια θεση μνημης μιας μεταβλητης και ξερω να τους χρησιμοποιω οσον αφορα την δηλωση τους ,την εκτυπωση στην οθονη της θεσης μνημης οπως και της ιδιας της τιμης της μεταβλητης που αντιπροσωπευουν.Ομως δεν καταλαβαινω γιατι να χρησιμοποιω την τιμη μιας μεταβλητης μεσω δεικτη και οχι απευθειας απο την ιδια της μεταβλητη ?. Ποια η ουσιαστικη χρησιμοτητα τους ?.

Δημοσ.

Καλημερα,νομιζω οτι τους δεικτες τους χρησιμοποιουν κυριως σε συναρτησεις.Αν δεν κανω λαθος στις συναρτησεις,μπορεις να βαλεις ως εισοδο οσες μεταβλητες θες,αλλα ως εξοδο λαμβανεις μονο μια μεταβλητη.Οποτε χρησιμοποιωντας τους δεικτες και τις θεσεις μνημης μπορεις να παιρνεις ουσιαστικα ως εξοδο τιμες πολλων μεταβλητων.Περιπου κατι τετοιο παιζει

Δημοσ.

Μπορείς να ρίξεις μια ματιά σε αυτή την εξαιρετική σελίδα: 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

Δημοσ.

Στη C++ οι pointers έχουν τεράστια σημασία. Μερικά παραδείγματα:

 

-Χρησιμοποιούνται για να ελέγξουμε το lifetime ενός object.

-Για να βάλουμε οbjects κλάσης που δεν είναι copyable σε STL containers.

-Dynamic memory allocation όπως και στη C.

-Κυριότερο, ο μηχανισμός υλοποίησης του πολυμορφισμού στη C++ γίνεται μέσω pointers.

-Ακραιό, πολλές φορές, για εφαρμογές που χρειάζονται πολύ καλή διαχείριση της μνήμης (π.χ κονσολοπαίχνιδα ή προγράμματα που τρέχουν σε embedded περιβάλλοντα) είναι αναγκαίο να γραφτεί κάποιος custom allocator για να μη γίνεται κατακερματισμός του free-store. Guess-what, pointers.

Δημοσ.

Παραμένει όμως μικρότερη η σημασία τους από ότι στη C ;)

 

Ίσως "αναγκαιότητα" είναι καλύτερη λέξη, υπό την έννοια πως υπάρχουν λειτουργίες που στη C++ μπορούν να γίνουν χωρίς χρήση δεικτών, ενώ στη C είναι μονόδρομος.

Δημοσ.

Παραμένει όμως μικρότερη η σημασία τους από ότι στη C ;)

 

Ίσως "αναγκαιότητα" είναι καλύτερη λέξη, υπό την έννοια πως υπάρχουν λειτουργίες που στη C++ μπορούν να γίνουν χωρίς χρήση δεικτών, ενώ στη C είναι μονόδρομος.

 

Όχι, είναι το ίδιο σημαντικοί. Όλα αυτά που έγραψα (αν εξαιρέσεις το τελευταίο), κυρίως ο πολυμορφισμός και η διαχείρηση του lifetime των objects, είναι απαραίτητα για να γραφτεί σοβαρό λογισμικό σε C++.

Δημοσ.

Όχι, είναι το ίδιο σημαντικοί. Όλα αυτά που έγραψα (αν εξαιρέσεις το τελευταίο), κυρίως ο πολυμορφισμός και η διαχείρηση του lifetime των objects, είναι απαραίτητα για να γραφτεί σοβαρό λογισμικό σε C++.

Σωστά αλλά για τον πολυμορφισμό εξαρτάται από τις ανάγκες της κάθε εφαρμογής, δεν είναι απαραίτητος (σε αντίθεση με τους δείκτες που συνήθως χρειάζονται πολύ περισσότερο).

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...