using arrays with functions c
Όλα όσα πρέπει να γνωρίζετε για τις συστοιχίες με λειτουργίες στο C ++:
Σε αυτό το σεμινάριο, θα συζητήσουμε πώς μπορούν να χρησιμοποιηθούν πίνακες με λειτουργίες στο C ++. Γενικά, οι πίνακες μπορούν να μεταβιβαστούν σε συναρτήσεις ως ορίσματα με τον ίδιο τρόπο όπως μεταδίδουμε τις μεταβλητές σε συναρτήσεις.
Αλλά η αξιολόγηση των τυπικών παραμέτρων είναι ελαφρώς διαφορετική όσον αφορά τις συστοιχίες. Πριν πραγματικά εξερευνήσουμε τη μετάβαση των συστοιχιών σε συναρτήσεις, πρέπει να συζητήσουμε εν συντομία την έννοια ενός δείκτη σε έναν πίνακα.
=> Δείτε τα εκπαιδευτικά σεμινάρια In-Depth C ++ εδώ.
Τι θα μάθετε:
- Δείκτης σε μια σειρά
- Διαβίβαση συστοιχιών στη λειτουργία
- Επιστροφή συστοιχιών από συναρτήσεις
- συμπέρασμα
- Συνιστώμενη ανάγνωση
Δείκτης σε μια σειρά
Εξετάστε τον ακόλουθο πίνακα που περιέχει τους πέντε πρώτους αριθμούς της ακολουθίας Fibonacci.
int fibSeq[5] = {1,1,2,3,5};
Ας δηλώσουμε ένα δείκτη fibPtr για να δείξουμε αυτόν τον πίνακα.
int* fibPtr; fibPtr = fibSeq;
Όταν εκτυπώνουμε τα περιεχόμενα του fibPtr, η έξοδος θα είναι το πρώτο στοιχείο της συστοιχίας fibSeq. Αυτό συμβαίνει επειδή το όνομα του πίνακα χωρίς αγκύλες τετράγωνου αξιολογείται σε δείκτη προς το πρώτο στοιχείο του πίνακα. Έτσι στο παραπάνω παράδειγμα, το όνομα 'fibSeq' δείχνει το πρώτο στοιχείο του πίνακα 'fibSeq'.
Παρακάτω είναι μια εικονική παράσταση του ίδιου:
Όπως φαίνεται στην παραπάνω εικονική παράσταση, το fibPtr δείχνει το πρώτο στοιχείο του πίνακα. Χρησιμοποιώντας έτσι τον αριθμητικό δείκτη, μπορούμε να εκτυπώσουμε όλα τα στοιχεία του πίνακα χρησιμοποιώντας απλώς το fibPtr.
Για παράδειγμα, Η έκφραση * (fibPtr + 1) θα δείχνει το δεύτερο στοιχείο του πίνακα και ούτω καθεξής.
etl δοκιμές ερωτήσεων και απαντήσεων συνέντευξης pdf
Ας το βάλουμε σε ένα πρόγραμμα και ελέγξτε την έξοδο των 'fibSeq' και 'fibPtr':
#include #include using namespace std; int main() { int fibSeq[5] = {1,1,2,3,5}; int* fibPtr; fibPtr = fibSeq; cout<<'
fibSeq points to :'<<*fibSeq; cout<<'
fibSeq[0]: '<<*fibPtr; cout<<'
fibSeq[1]: '<<*(fibPtr + 1); cout<<'
fibSeq[2]: '<<*(fibPtr + 2); cout<<'
fibSeq[3]: '<<*(fibPtr + 3); cout<<'
fibSeq[4]: '<<*(fibPtr + 4); } }
Παραγωγή:
Το fibSeq δείχνει: 1
fibSeq [0]: 1
fibSeq [1]: 1
fibSeq [2]: 2
fibSeq [3]: 3
fibSeq [4]: 5
Στο παραπάνω παράδειγμα, δηλώνουμε μια μεταβλητή δείκτη fibPtr και στη συνέχεια το επισημαίνουμε στον πίνακα, εκχωρώντας το όνομα του πίνακα στο fibPtr. Όταν το κάνουμε αυτό, κάνουμε το fibPtr να δείχνει στο πρώτο στοιχείο του πίνακα. Στη συνέχεια εκτυπώνουμε όλες τις τιμές ενός πίνακα χρησιμοποιώντας το fibPtr.
Διαβίβαση συστοιχιών στη λειτουργία
Όταν ασχολούμαστε με συναρτήσεις, περνάμε συστοιχίες στη συνάρτηση με παρόμοιο τρόπο όπως μεταδίδουμε μεταβλητές στη λειτουργία. Αλλά δεν περνάμε τη μεταβλητή πίνακα του τύπου [].
Αντ 'αυτού, περνάμε το δείκτη στον πίνακα, δηλαδή το όνομα του πίνακα που δείχνει το πρώτο στοιχείο του πίνακα. Στη συνέχεια, η τυπική παράμετρος που δέχεται αυτόν τον δείκτη είναι στην πραγματικότητα μια μεταβλητή πίνακα. Καθώς περνάμε το δείκτη, μπορούμε να τροποποιήσουμε άμεσα τον πίνακα μέσα στη συνάρτηση.
Εξετάστε το ακόλουθο πρόγραμμα που υπολογίζει το τετράγωνο κάθε στοιχείου των πέντε πρώτων στοιχείων στην ακολουθία Fibonacci για να δείξετε τη μετάβαση ενός πίνακα σε λειτουργία.
#include #include using namespace std; void fibSeqSquare(int fibSeq[]) { for(int i=0;i<5;i++) { fibSeq[i] *= fibSeq[i]; } } int main() { int fibSeq[5] = {1,1,2,3,5}; fibSeqSquare(fibSeq); for(int i=0;i<5;i++) { cout<Στο παραπάνω παράδειγμα, υπολογίζουμε το τετράγωνο κάθε στοιχείου σε μια ακολουθία Fibonacci. Αυτό το τετράγωνο υπολογίζεται μέσα σε μια συνάρτηση. Ως εκ τούτου μεταβιβάζουμε το όνομα του πίνακα στη συνάρτηση 'fibSeqSquare' ενώ καλούμε τη συνάρτηση από την κύρια. Μέσα στη συνάρτηση, υπολογίζουμε τα τετράγωνα κάθε στοιχείου.
Καθώς περάσαμε την αναφορά στον πίνακα μέσω ενός δείκτη, οποιεσδήποτε τροποποιήσεις κάνουμε στον πίνακα μέσα στη συνάρτηση, θα αντικατοπτρίζουν τον πίνακα. Ως εκ τούτου, όταν εκτυπώνουμε τον πίνακα στην κύρια συνάρτηση, λαμβάνουμε τα τετράγωνα κάθε στοιχείου ως έξοδο.
Στο παραπάνω παράδειγμα, έχουμε δει ότι το όρισμα πίνακα (τυπική παράμετρος) της συνάρτησης fibSeqSquare δεν καθορίζει το μέγεθος του πίνακα, αλλά μόνο τα αγκύλες τετραγώνου ([]) για να δείξει ότι είναι ένας πίνακας. Αυτός είναι ένας τρόπος προσδιορισμού των ορισμάτων του πίνακα.
Ένας άλλος τρόπος καθορισμού του ορίσματος πίνακα στη λίστα τυπικών παραμέτρων είναι ο καθορισμός του μεγέθους του πίνακα εντός των αγκυλών. Και τα δύο επιχειρήματα λειτουργούν παρόμοια. Αυτοί είναι απλώς οι δύο τρόποι με τους οποίους καθορίζουμε τα ορίσματα του πίνακα.
Το παρακάτω παράδειγμα δείχνει ένα όρισμα Array που καθορίζεται με μέγεθος.
#include #include using namespace std; void displayFibSeq(int fibSeq[5]) { for(int i=0;i<5;i++) { cout<Το παραπάνω παράδειγμα έχει μια λειτουργία για την εμφάνιση της ακολουθίας Fibonacci. Η συνάρτηση έχει μια παράμετρο ως πίνακα όπου έχουμε επίσης καθορίσει το μέγεθος του πίνακα.
Μπορούμε επίσης να περάσουμε πολυδιάστατες συστοιχίες σε λειτουργίες με τον ίδιο τρόπο όπως φαίνεται παραπάνω.
τι vr ακουστικό λειτουργεί με xbox ένα
Επιστροφή συστοιχιών από συναρτήσεις
Όταν πρόκειται για την επιστροφή ενός πίνακα από τη συνάρτηση, το C ++ δεν μας επιτρέπει να επιστρέψουμε έναν ολόκληρο πίνακα από τη συνάρτηση. Ωστόσο, μπορούμε να κάνουμε μια συνάρτηση για να επιστρέψουμε έναν δείκτη στον πίνακα. Αλλά υπάρχει μια παγίδα σε αυτό.
Εξετάστε το ακόλουθο κομμάτι κώδικα:
int* funcArray() { int arr[3] = {1,2,3}; return arr; } int main() { int* aryPtr = funcArray(); cout< Αν και το παραπάνω πρόγραμμα απλώς επιστρέφει το δείκτη στο πρώτο στοιχείο ενός πίνακα από τη συνάρτηση, δεν λειτουργεί όπως αναμενόταν. Δεν μπορούμε να εγγυηθούμε ότι το πρόγραμμα θα μας δώσει το σωστό αποτέλεσμα. Μπορεί ή όχι να δώσει τη σωστή έξοδο.
Αυτό οφείλεται στο γεγονός ότι επιστρέφουμε την τοπική μεταβλητή από τη συνάρτηση και δεν είμαστε σίγουροι αν θα είναι στο πεδίο εφαρμογής τη στιγμή που θα επιστραφεί ή όχι.
Με λίγα λόγια, το C ++ δεν προτιμά την επιστροφή συστοιχιών από συναρτήσεις.
Αν χρειαστεί να επιστρέψουμε πίνακες από τη συνάρτηση, πρέπει να χρησιμοποιήσουμε οποιαδήποτε από τις ακόλουθες μεθόδους:
# 1) Επιστροφή δυναμικά κατανεμημένων συστοιχιών
Μπορούμε να επιστρέψουμε το δείκτη του πίνακα από τον δυναμικά εκχωρημένο πίνακα. Χρησιμοποιούμε τον τελεστή «νέο» για δυναμική κατανομή του πίνακα. Δεδομένου ότι είναι ένας δυναμικός πίνακας, θα βρίσκεται στο πεδίο εκτός εάν «διαγράψουμε» τον πίνακα. Ως εκ τούτου, το πρόγραμμα θα τρέξει καλά όταν επιστρέψουμε τον πίνακα.
Αυτό φαίνεται στο ακόλουθο παράδειγμα.
#include #include using namespace std; int* funcArray() { int* arr = new int[3]; arr[0]=1; arr[1]=2; arr[2]=3; return arr; } int main() { int* aryPtr = funcArray(); cout< Παραγωγή:
1 2 3
# 2) Επιστροφή στατικών συστοιχιών
Καθώς οι στατικές μεταβλητές / πίνακες έχουν πεδίο εφαρμογής σε όλο το πρόγραμμα, μπορούμε επίσης να επιστρέψουμε στατικές συστοιχίες από συναρτήσεις. Μπορούμε να πάρουμε ένα παράδειγμα για να το αποδείξουμε αυτό. Αυτό είναι το ίδιο με το προηγούμενο παράδειγμα με τη μόνη διαφορά που σε αυτό το παράδειγμα χρησιμοποιήσαμε έναν στατικό πίνακα αντί του δυναμικά κατανεμημένου πίνακα.
#include #include using namespace std; int* funcArray() { static int arr[3]; arr[0]=1; arr[1]=2; arr[2]=3; return arr; } int main() { int* aryPtr = funcArray(); cout< Παραγωγή:
1 2 3
πώς να ανοίξετε ένα αρχείο βάζου με java στα Windows 10
Σημείωση : Μπορούμε επίσης να χρησιμοποιήσουμε μια δομή για να τυλίξουμε τον πίνακα μέσα σε αυτό και μετά να επιστρέψουμε αυτήν τη δομή. Με αυτόν τον τρόπο, θα επιστρέψουμε φυσικά έναν πίνακα από μια συνάρτηση. Αλλά αυτή δεν είναι μια πολύ εφικτή μέθοδος επιστροφής συστοιχιών.
συμπέρασμα
Έτσι, σε αυτό το σεμινάριο, συζητήσαμε λεπτομερώς τους πίνακες σε σχέση με τις λειτουργίες. Ελπίζουμε ότι αυτό το σεμινάριο θα συνέβαλε στην εξάλειψη όλων των αμφιβολιών και των παρανοήσεων σχετικά με τις συστοιχίες και τις λειτουργίες C ++.
=> Ανατρέξτε στον τέλειο οδηγό εκπαίδευσης C ++ εδώ.
Συνιστώμενη ανάγνωση