Διαφορά μεταξύ πίνακα και δείκτη

Συγγραφέας: Laura McKinney
Ημερομηνία Δημιουργίας: 1 Απρίλιος 2021
Ημερομηνία Ενημέρωσης: 7 Ενδέχεται 2024
Anonim
Κεφάλαιο 1
Βίντεο: Κεφάλαιο 1

Περιεχόμενο


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

  1. Συγκριτικό διάγραμμα
  2. Ορισμός
  3. Βασικές διαφορές
  4. συμπέρασμα

Συγκριτικό διάγραμμα

Βάση σύγκρισηςΠίνακαςΔείκτης
Δήλωση// Σε C ++
πληκτρολογήστε var_name;
// Στην Java.
πληκτρολογήστε var-name;
var_name = νέος τύπος;
// Σε C ++
πληκτρολογήστε * var_name;
ΕργαζόμενοςΑποθηκεύει την τιμή της μεταβλητής του ομοιογενούς τύπου δεδομένων.Αποθηκεύστε τη διεύθυνση της άλλης μεταβλητής του ίδιου τύπου δεδομένων με το datatype των μεταβλητών δείκτη δείκτη.
ΓενιάΜπορεί να δημιουργηθεί μια σειρά από δείκτες.Μπορεί να δημιουργηθεί ένας δείκτης σε μια συστοιχία.
Υποστήριξη JavaΥποστηρίξτε την έννοια του πίνακα.Δεν υποστηρίζει δείκτες.
ΑποθήκευσηΜια κανονική array αποθηκεύει τις τιμές της μεταβλητής και pointer array αποθηκεύει τη διεύθυνση των μεταβλητών.Οι δείκτες είναι ειδικά σχεδιασμένοι για να αποθηκεύουν τη διεύθυνση των μεταβλητών.
ΧωρητικότηταΜια διάταξη μπορεί να αποθηκεύσει τον αριθμό στοιχείων που αναφέρονται στο μέγεθος της μεταβλητής πίνακα. Μια μεταβλητή δείκτη μπορεί να αποθηκεύσει τη διεύθυνση μίας μόνο μεταβλητής τη φορά.


Ορισμός του πίνακα

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

// Στον τύπο C ++ var_name; // Στην Java. πληκτρολογήστε var-name; var_name = νέος τύπος;

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


// πρόσβαση με τη χρήση αριθμητικού δείκτη Void display_array (int * S) {ενώ (* s) {cout (<< "τιμή είναι" << * s); * s ++; }}

Η χρήση της αριθμητικής διάταξης δείκτη θα λειτουργούσε ταχύτερα σε σύγκριση με την "ευρετηρίαση πίνακα", δηλ. Την πρόσβαση στη μεταβλητή πίνακα χρησιμοποιώντας το δείκτη της. Αν χρειάζεται να μεταβιβάσετε μια σειρά από δείκτες σε μια συνάρτηση, μπορεί να γίνει χρησιμοποιώντας την ίδια μέθοδο που χρησιμοποιείτε για να περάσετε έναν κανονικό πίνακα, δηλαδή να καλέσετε απευθείας τη λειτουργία με το όνομα του πίνακα, χωρίς κανένα ευρετήριο.

Ας το καταλάβουμε με το παράδειγμα

// Δηλώνει τη σειρά των δεικτών. int * p;

Εδώ, δείχνει ότι το «p» είναι ένας πίνακας τύπου ακέραιου, θα κρατήσει τη διεύθυνση του 10 μεταβλητού τύπου ακέραιου τύπου. Ας περάσουμε την παραπάνω συστοιχία δείκτη σε μια οθόνη λειτουργίας ().

οθόνη (p); // Καλέστε την οθόνη λειτουργίας. άκυρη απεικόνιση (int * d) {// Λειτουργία λήψης της διάταξης δείκτη. για το (int i = 0; i <10; i ++) {cout << ("ευρετήριο" <

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

Ορισμός δείκτη

Ο δείκτης είναι μια μεταβλητή που διατηρεί τη διεύθυνση μνήμης άλλης μεταβλητής. Ο τύπος δεδομένων και των δύο, της μεταβλητής δείκτη και της μεταβλητής της οποίας η διεύθυνση αντιστοιχεί σε μια μεταβλητή δείκτη, πρέπει να είναι ίδια. Η μεταβλητή δείκτη είναι όπως δηλώνεται ως εξής.

// Δήλωση σε τύπο C ++ * όνομα.

Εδώ, ο τύπος είναι ένας τύπος δεδομένων, το όνομα είναι το όνομα της μεταβλητής δείκτη. Ο «τύπος» ορίζει τι είδους διεύθυνση της μεταβλητής μπορεί να αποθηκευτεί στη μεταβλητή δείκτη. Για παράδειγμα, ο ακέραιος δείκτης θα αποθηκεύσει τη διεύθυνση της μεταβλητής ακέραιας. Υπάρχουν δύο χειριστές δείκτη '*' και '&'. Ο χειριστής '*' επιστρέφει την τιμή που βρίσκεται στη διεύθυνση, η οποία είναι αποθηκευμένη στη μεταβλητή ακολουθούμενη από το σύμβολο '*'. Ο χειριστής '&' επιστρέφει τη διεύθυνση της μεταβλητής που ακολουθείται από το σύμβολο '&'.

// για παράδειγμα int b = 10 int a = & b; // Εδώ η διεύθυνση του b αποθηκεύεται στη μεταβλητή a. / / επιτρέπει τη διεύθυνση του b είναι 2000, οπότε τώρα a = 2000. int c = * a; // Εδώ, η μεταβλητή ακέραιου δείκτη * a θα επιστρέψει την τιμή που βρίσκεται στη διεύθυνση που είναι αποθηκευμένη σε ένα αρχείο .ie. c = 10.

Υπάρχουν μόνο δύο αριθμητικοί χειριστές που μπορείτε να χρησιμοποιήσετε στους δείκτες, δηλ. Προσθήκη και αφαίρεση. Εάν εφαρμόζετε προσαύξηση σε μια μεταβλητή δείκτη ακέραιου αριθμού, θα αυξηθεί κατά το μέγεθος του τύπου δεδομένων, δηλ. Κατά 2 bytes, καθώς είναι ένας ακέραιος δείκτης, στην αύξηση θα πρέπει να δείχνει την επόμενη μεταβλητή ακέραιων αριθμών. Το ίδιο συμβαίνει και με μείωση.

// p είναι ένας ακέραιος δείκτης που περιέχει τιμή 2000. p ++. // τώρα p = 2002. Π--; // now p περιέχει και πάλι 2000, όπως μειώνεται από δύο bytes.

  1. Ένας πίνακας αποθηκεύει τις μεταβλητές παρόμοιων τύπων δεδομένων και οι τύποι δεδομένων των μεταβλητών πρέπει να ταιριάζουν με τον τύπο του πίνακα. Από την άλλη πλευρά, η μεταβλητή δείκτη αποθηκεύει τη διεύθυνση μιας μεταβλητής, ενός τύπου παρόμοιου με τύπο μεταβλητού τύπου δείκτη.
  2. Μπορούμε να δημιουργήσουμε μια σειρά από δείκτες, δηλαδή μια συστοιχία των οποίων οι μεταβλητές είναι οι μεταβλητές του δείκτη. Από την άλλη πλευρά, μπορούμε να δημιουργήσουμε ένα δείκτη που δείχνει σε μια συστοιχία.
  3. Η Java υποστηρίζει πίνακα, αλλά δεν υποστηρίζει δείκτες.
  4. Ένα μέγεθος πίνακα αποφασίζει τον αριθμό των μεταβλητών που μπορεί να αποθηκεύσει ενώ μια μεταβλητή δείκτη μπορεί να αποθηκεύσει τη διεύθυνση της μόνο μεταβλητής

Σημείωση:

Η Java δεν υποστηρίζει ή αποφεύγει αυστηρά τους δείκτες.

Συμπέρασμα:

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