Βίντεο: Data Analysis in R by Dustin Tran 2024
Αν έχετε έναν πίνακα και δεν θέλετε να αλλάξει το περιεχόμενό του, μπορείτε να το κάνετε σταθερό. Οι ακόλουθες γραμμές κώδικα, που βρίσκονται στο παράδειγμα Array05, καταδεικνύουν αυτήν την προσέγγιση:
const int Permanent [5] = {1, 2, 3, 4, 5}; cout << μόνιμη [1] << endl;
Αυτός ο πίνακας λειτουργεί όπως οποιοσδήποτε άλλος πίνακας, εκτός από το ότι δεν μπορείτε να αλλάξετε τους αριθμούς μέσα σε αυτόν. Αν προσθέσετε μια γραμμή όπως η ακόλουθη γραμμή, εμφανίζεται ένα σφάλμα μεταγλωττιστή, επειδή ο μεταγλωττιστής γνωρίζει τις σταθερές:
Μόνιμη [2] = 5;
Εδώ εμφανίζεται το σφάλμα που παίρνετε όταν δοκιμάζετε αυτό στο Code:: Αποκλεισμός:
σφάλμα: αντιστοίχιση θέσης μόνο για ανάγνωση 'Permanent [2]'
Τι γίνεται με μια συνεχή σειρά nonconstants; Μπορείς να το κάνεις αυτό? Λοιπόν, μερικές φορές - ανάλογα με τον μεταγλωττιστή. Όπως φρικτό όπως ο παρακάτω κώδικας (που βρίσκεται στο παράδειγμα Array06) φαίνεται - και δεν είναι πρότυπο ANSI! - μπορείτε να το κάνετε αυτό με παλαιότερες εκδόσεις των μεταγλωττιστών gcc. (Το Microsoft Visual C ++ και το Borland C ++ Builder δεν το επιτρέπουν και ο κώδικας:: Ο μεταγλωττιστής μπλοκ σας παρουσιάζει ένα σφάλμα: μη έγκυρο μήνυμα σφάλματος εκχώρησης πίνακα.)
int NonConstant [5] = {1, 2, 3, 4, 5}. int ΆλλοςList [5] = {10, 11, 12, 13, 14}. OtherList = NonConstant.
Με άλλα λόγια, αυτή η τρίτη γραμμή λέει, "Ξεχάστε τι δείχνει το OtherList. Αντίθετα, το κάνετε στο πρώτο πεδίο {1, 2, 3, 4, 5}! "Τώρα, πραγματικά δεν πρέπει να γράψετε κώδικα όπως αυτό (θυμηθείτε, κρατήστε τα πράγματα απλά και κατανοητά), έτσι εάν θέλετε να αποφύγετε τέτοιου είδους πράγματα, μπορείτε να κάνετε τη συστοιχία σταθερή:
! - 3 ->const int NonConstant [5] = {1, 2, 3, 4, 5}. const int ΆλλοList [5] = {10, 11, 12, 13, 14}. OtherList = NonConstant.
Τώρα, όταν ο μεταγλωττιστής φτάνει στην τρίτη γραμμή, σας δίνει σφάλμα:
σφάλμα: ανάθεση της μεταβλητής μόνο για ανάγνωση 'OtherList'
Αλλά ίσως παρατηρήσετε ότι ο τρόπος που δημιουργήσατε τη σταθερά του πίνακα ήταν με τον ίδιο τρόπο που κάνατε τα στοιχεία του σταθερά στον κώδικα που ήρθε ακριβώς πριν από αυτό το παράδειγμα. Ωχ! Τι είναι αυτό; Αποδεικνύει ότι υπάρχουν ορισμένοι κανόνες.
Η παρακάτω λίστα περιγράφει τους κανόνες, λεπτομερώς, για τη σταθερότητα των συστοιχιών:
-
Αν θέλετε να κάνετε μια παράμετρο σταθερή, μπορείτε να προηγηθεί ο τύπος της με τη λέξη const. Όταν το κάνετε αυτό, το όνομα της συστοιχίας είναι σταθερό και τα στοιχεία εντός του πίνακα είναι σταθερά και . Επομένως δεν μπορείτε να έχετε μια σταθερή συστοιχία με μη σταθερά στοιχεία, ούτε μπορείτε να έχετε έναν μη σταθερό πίνακα με σταθερά στοιχεία.
-
Η έννοια ενός nonconstant array υπάρχει μόνο στο gcc και δεν είναι πρότυπο ANSI.
Εάν θέλετε πραγματικά να πάρετε τεχνική, το πρότυπο C ++ ANSI λέει ότι όταν βάζετε τη λέξη const μπροστά από μια δήλωση πίνακα, δεν κάνετε τη συστοιχία σταθερή. λέτε ότι ο πίνακας διατηρεί μόνο σταθερές.
Ωστόσο, όταν χρησιμοποιείτε το const με αυτόν τον τρόπο, οι περισσότεροι μεταγλωττιστές κάνουν επίσης τον ίδιο τον πίνακα σταθερό. Αλλά αυτό είναι εντάξει. οι άνθρωποι δεν πρέπει να παίρνουν ένα όνομα πίνακα και να το αντιγράφουν σε κάτι άλλο. Αυτό δεν είναι καλό στυλ προγραμματισμού, και απλά ζητά σφάλματα - ή, τουλάχιστον, σύγχυση - αργότερα.