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

Χρησιμότητα δεικτών (pointers) της C/C++


WordUp

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

Δημοσ.

Όντας newbie με τον προγραμματισμό, ξεκίνησα δειλά-δειλά την C και είμαι αρκετά ικανοποιημένος με τον εαυτό μου για το χρονικό διάστημα που διαβάζω.

Περιπλανώμενος στον κυβερνοχώρο, έπεσα πάνω στους Pointers της C, οι οποίοι στην ουσία δείχνουν μια διεύθυνση μνήμης σε μια μεταβλητή (αν θυμάμαι καλά, δεν έχω ασχοληθεί ακόμα).

Και ερωτώ τώρα:

Ποιά η χρησιμότητα των pointers; Σε ποιές περιπτώσεις μπορούμε να τους χρησιμοποιήσουμε; Γιατί άλλες γλώσσες δε διαθέτουν κάτι αντίστοιχο; Έψαξα λίγο στο google, αλλά επειδή δε φημίζομαι για τα αγγλικά μου, θα'θελα λίγο "σπρώξιμο" :-)

 

(ΥΓ: Είναι όντως τόσο δύσκολοι όσο λένε μερικοί; Ή απλά είναι τεμπέληδες; :P)

 

Ευχαριστώ προκαταβολικά

Δημοσ.

Οι pointers είναι βασικότατη ιδέα του προγραμματισμού. Οι χρήσεις τους είναι πάρα πολλές. Ενδεικτικά σου αναφέρω ότι για να φτιάξεις μια δομή δεδομένων (λίστα, στίβα, ουρά, γράφο) χρησιμοποιείς pointers.

Όλες οι γλώσσες τους χρησιμοποιούν. Απλά μερικές, όπως η java το κάνουν κρυφά από τον χρήστη, κάτι το οποίο είναι αρκετά βολικό, αλλά σε ορισμένες περιπτώσεις μπορεί να περιορίσει τις δυνατότητες της γλώσσας.

Αν συνεχίσεις να διαβάζεις θα καταλάβεις σίγουρα την χρησιμότητά τους από μόνος σου.

Δημοσ.

Φίλε μου είναι πολύ απλό. Δεν χρειάζεται να χρησιμοποιήσεις pointers αυτή την στιγμή. Μην βιάζεσαι και μην πηδάς κεφάλαια γιατί θα μπερδευτείς. Συνέχισε να μαθαίνεις την c βήμα βήμα. Κάποια στιγμή θα θες να φτιάξεις κάτι που δεν θα μπορείς και τότε είναι που θα καταλάβεις από μόνος σου σε τι χρησιμεύουν. Και δεν είναι ένα πράγμα αλλά πολλά.

 

Θα σου πω ένα απλό παράδειγμα μόνο για να μην σε τρώει η περιέργια. Έστω ότι θες να βάψεις το σπίτι σου. Μπορείς να πάρεις το σπίτι στην πλάτη σου και να το πας στον μπογιατζή. Η μπορείς να δώσεις την διεύθυνση στον μπογιατζή και αυτός βρίσκει το σπίτι και στο βάφει.

Δημοσ.
Έστω ότι θες να βάψεις το σπίτι σου. Μπορείς να πάρεις το σπίτι στην πλάτη σου και να το πας στον μπογιατζή. Η μπορείς να δώσεις την διεύθυνση στον μπογιατζή και αυτός βρίσκει το σπίτι και στο βάφει.

 

Έγραψε το παράδειγμα. Ειδικά αν συλλογιστεί κανείς πως κάποια πράγματα ΔΕΝ γίνονται, όπως για παράδειγμα να φορτωθείς το σπίτι στη πλάτη. Τότε ΜΟΝΟ με τη διεύθυνση μπορείς να κάνεις δουλειά.

 

Πάντως όπως είπαν και οι προηγούμενοι, μην ασχολείσαι ακόμη με pointers. Όταν θα είσαι έτοιμος θα ασχοληθούν αυτοί μαζί σου.

Δημοσ.
Όντας newbie με τον προγραμματισμό, ξεκίνησα δειλά-δειλά την C και είμαι αρκετά ικανοποιημένος με τον εαυτό μου για το χρονικό διάστημα που διαβάζω.

Περιπλανώμενος στον κυβερνοχώρο, έπεσα πάνω στους Pointers της C, οι οποίοι στην ουσία δείχνουν μια διεύθυνση μνήμης σε μια μεταβλητή (αν θυμάμαι καλά, δεν έχω ασχοληθεί ακόμα).

Και ερωτώ τώρα:

Ποιά η χρησιμότητα των pointers; Σε ποιές περιπτώσεις μπορούμε να τους χρησιμοποιήσουμε; Γιατί άλλες γλώσσες δε διαθέτουν κάτι αντίστοιχο; Έψαξα λίγο στο google, αλλά επειδή δε φημίζομαι για τα αγγλικά μου, θα'θελα λίγο "σπρώξιμο" :-)

 

(ΥΓ: Είναι όντως τόσο δύσκολοι όσο λένε μερικοί; Ή απλά είναι τεμπέληδες; :P)

 

Ευχαριστώ προκαταβολικά

 

χρηεις των pointers?ΑΠΕΙΡΕΣ

πχ

1.περασμα πινακα ως ορισμα σε συναρτηση

2.σχεδον σε ολες τις δομες δεδομενων

3.δυναμικη δεσμευση μνημης

4.πολλα ακομα...

 

δυσκολοι οχι αν καταλαβεις "τι παιζει". η χρηση τους ? τεραστια.

Δημοσ.

Ευχαριστώ παιδιά για τις απαντήσεις σας, κατάλαβα τι παίζει πάνω-κάτω.

Όχι, δεν είπα να ασχοληθώ από τώρα. Απλά ήθελα να μάθω εγκυκλοπαιδικά ;)

Δημοσ.

Δείκτης είναι μια μεταβλητή που περιέχει μια διεύθυνση μιας μεταβλητής. Συχνά οι δείκτες χρησιμοποιούνται σαν παράμετροι σε συναρτήσεις. Ο λόγος είναι οτι, αν σε μια συνάρτηση εκχωρηθουν οι τιμές των μεταβλητών σαν παράμετροι, η συνάρτηση αυτή δημιουργεί αντίγραφα των παραμέτρων και μετά το τέλος της συνάρτησης καταστρέφονται αυτά τα αντίγραφα, με αποτέλεσμα οι οποιεσδήποτε αλλαγές να είναι ουσιαστικά άκυρες στις μεταβλητές που εκχωρήθηκαν στην συνάρτηση. Ενώ αν χρησιμποιηθούν δείκτες οι αλλαγές γίνονται απ'ευθείας στην διεύθυνση που είναι αποθηκευμένη η μεταβλητή.

Δημοσ.
Γιατί άλλες γλώσσες δε διαθέτουν κάτι αντίστοιχο;

 

Ολες πλεον οι συγχρονες γλωσσες (VB.NET,JAVA,C#,C++ κτλ) περιεχουν εμμεσα ή αμεσα την εννοια του δείκτη... Στην C,C++ λεγεται pointer, στις Java,VB.NET,C# λεγεται tracking handle......

Δημοσ.
..μην ασχολείσαι ακόμη με pointers. Όταν θα είσαι έτοιμος θα ασχοληθούν αυτοί μαζί σου.
Όχι, δεν είπα να ασχοληθώ από τώρα. Απλά ήθελα να μάθω εγκυκλοπαιδικά ;)

 

καλά, όταν ασχοληθείς... μάθε τους καλά, πριν πας παρακάτω

ή απλά σταμάτα εκεί και βρές άλλη γλώσσα :-D

πιάσε πχ. VB.net, C#, Java, κλπ..

 

γιατι περισσότερα απο ενα "hello world" σε C/C++, χωρίς pointers... ΔΕΝ κάνεις.

Δημοσ.

Κάποιες γλώσσες τους χρησιμοποιούν (C,C++,C#), κάποιες άλλες χρησιμοποιούν αναφορές - κάτι σαν pointers που δεν είναι pointers (C++, C#, Java) και μερικές άλλες δεν έχουν καθόλου pointers (Prolog, Haskell, LISP). Μπορείς να κάνεις τα πάντα και χωρίς pointers.

 

Ουσιαστικά, σε γλυτώνουν από το να αντιγράφεις συνέχεια κομμάτια μνήμης, αν συντρέχουν συγκεκριμένες προϋποθέσεις. Όταν κατανοήσεις τι είναι ο pointer, τότε θα μιλήσουμε και για τις προϋποθέσεις.

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

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

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