Πώς να περάσετε έναν πίνακα σε μια συνάρτηση

Πίνακας περιεχομένων:

Πώς να περάσετε έναν πίνακα σε μια συνάρτηση
Πώς να περάσετε έναν πίνακα σε μια συνάρτηση

Βίντεο: Πώς να περάσετε έναν πίνακα σε μια συνάρτηση

Βίντεο: Πώς να περάσετε έναν πίνακα σε μια συνάρτηση
Βίντεο: 10.1 - Πίνακες 2024, Νοέμβριος
Anonim

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

Πώς να περάσετε έναν πίνακα σε μια συνάρτηση
Πώς να περάσετε έναν πίνακα σε μια συνάρτηση

Είναι απαραίτητο

μεταγλωττιστές γλωσσών C και C ++

Οδηγίες

Βήμα 1

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

void ArrayFunction (int aNumbers [3]).

Μια τέτοια συνάρτηση καλείται μεταβιβάζοντας έναν πίνακα απευθείας σε αυτό ως επιχείρημα:

άκυρο SomeFunction ()

{

int aNumbers = {1, 2, 3};

ArrayFunction (aNumbers);

}

Τα μεταφερόμενα δεδομένα αντιγράφονται στη στοίβα. Η τροποποίηση του πίνακα στη λειτουργία που ονομάζεται δεν αλλάζει την πηγή.

Βήμα 2

Περάστε συστοιχίες μεταβλητού μήκους στη συνάρτηση. Για να το κάνετε αυτό, απλώς μην καθορίσετε τη διάσταση του αντίστοιχου ορίσματος:

void ArrayFunction (int aNumbers );

Πολυδιάστατες συστοιχίες μπορούν επίσης να περάσουν με παρόμοιο τρόπο (μόνο η πρώτη "διάσταση" μπορεί να είναι μεταβλητές):

void ArrayFunction (int aNumbers [3] [2]);

Αυτές οι λειτουργίες καλούνται με τον ίδιο τρόπο όπως στο πρώτο βήμα.

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

Βήμα 3

Περάστε τον πίνακα με δείκτη. Το όρισμα συνάρτησης πρέπει να είναι δείκτης προς μια τιμή με τύπο που αντιστοιχεί στα στοιχεία του πίνακα. Για παράδειγμα:

void ArrayFunction (int * pNumbers).

Η πρόσβαση σε δεδομένα σε μια συνάρτηση μπορεί να πραγματοποιηθεί τόσο στη σημείωση για εργασία με στοιχεία πίνακα όσο και με χρήση αριθμητικής διεύθυνσης:

void ArrayFunction (int * pNumbers)

{

Αριθμοί p [0] = 10; // πρόσβαση στο στοιχείο 0

* (pNumbers + 1) = 20; // πρόσβαση στο σημείο 1

}

Πρόσεχε! Δεδομένου ότι η συνάρτηση δεν μεταβιβάζεται αντίγραφο των δεδομένων, αλλά δείκτης σε αυτό, ο αρχικός πίνακας θα τροποποιηθεί.

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

άκυρο SomeFunction ()

{

int aNumbers = {1, 2, 3};

ArrayFunction (aNumbers); // ολόκληρος πίνακας

ArrayFunction (& aNumbers [1]); // ξεκινώντας από το δεύτερο στοιχείο

}

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

Βήμα 4

Μεταβίβαση δεδομένων σε μια συνάρτηση με μια παράμετρο που είναι αντικείμενο ή μια αναφορά σε ένα αντικείμενο της κλάσης που εφαρμόζει τη λειτουργικότητα του πίνακα Τέτοια μαθήματα ή πρότυπα κλάσης βρίσκονται συνήθως σε δημοφιλείς βιβλιοθήκες και πλαίσια (QVector σε Qt, CArray σε MFC, std:: vector in STL, κ.λπ.).

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

void ArrayFunction (QVector oArray)

{

int nItemCount = oArray.count ();

int nItem = oArray [0];

}

άκυρο SomeFunction ()

{

QVector oArray (10);

για (int i = 0; i

Συνιστάται: