Jump to content



επιστροφη στοιχειων πινακα απο συναρτηση


eternalob

Recommended Posts

Γλώσσα? Και μια που βλέπω Ηράκλειο, σχολή? :p

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

Βέβαια αν τον πίνακα τον στέλνεις από την μαιν στην συνάρτηση και πάλι πίσω στην μαιν τότε δεν χρειάζεται να είναι global και είσαι μια χαρά με τον ποιντερ νομίζω..

Link to comment
Share on other sites

Αν η γλώσσα που γράφεις υποστηρίζει dereference (Java, Pascal,...) τότε μπορείς να περάσεις ολόκληρο

το πίνακα σαν όρισμα στη συνάρτηση και να τον επεξεργαστείς.

Αν η γλώσσα δεν υποστηρίζει dereference (C, ...) τότε θα πρέπει να δουλέψεις με pointers για να μπορείς

να επεξεργαστείς τον πίνακα μέσα στη συνάρτηση.

Αν ο πίνακας είναι global τότε μπορείς να τον δεις/επεξεργαστείς απο οποιαδήποτε συνάρτηση χωρίς να είναι όρισμα

ή με χρήση pointer.

Αν ο πίνακας είναι static τότε απο τη στιγμή της αρχικοποίησης δε μπορεί να αλλάξει τις τιμές του, απο οποιαδήποτε

συνάρτηση.

Ψάξε να βρείς tutorials για το πως μπορείς να επεξεργάζεσαι πίνακες απο συναρτήσεις, για τη γλώσσα που θες.

Link to comment
Share on other sites

Στην C όταν η συνάρτηση που καλείς ανήκει σε άλλο file έχεις 2 τρόπους, ο ένας είναι να δημιουργήσεις έναν pointer και να τον περάσεις σαν argument στην function, στην function μέσα να κάνεις το allocation της μνήμης που θες, να κάνεις την επεξεργασία σου και να δείξεις με τον pointer την μνήμη αυτή... ο άλλος είναι να δηλώσεις εξαρχής τον πίνακα static στο file που κάνει την επεξεργασία και να κάνεις export τον pointer στον πίνακα αυτό...

Στην C++ ισχύει ο πρώτος με την C, αλλά μπορείς όμως να ορίσεις τον πίνακα σαν public member στην κλάση σου, και να έχεις πρόσβαση στον member pointer... μπορείς και static, αλλά στις κλάσεις γενικά το αποφεύγεις γιατί όταν τον χρησιμοποιείς μέσα στην κλάση, θέλει ειδική μεταχείριση καθώς οτιδήποτε static σε μια κλάση δεν μπορεί να δει τον this pointer της κλάσης...

Στις υπόλοιπες γλώσσες που είναι πλέον interpreted μπορείς να περάσεις συνήθως ένα reference στον πίνακα, αν τον φτιάχνεις (χωρίς να τον έχεις κάνει απαραίτητα initialize) στο scope που καλεί την συνάρτηση, αλλιώς τον φτιάχνεις εξ' αρχής στο scope που καλείς την συνάρτηση και τον περνάς όλο μαζί...

Στην C/C++ πρέπει να είσαι προσεκτικός με την μνήμη και να κάνεις release ότι κάνεις allocate, ενώ στις υπόλοιπες τα αναλαμβάνει (και καλά) ο garbage collector...

Επειδή πλέον οι libraries όλων των γλωσσών έχουν templates και containers, υπάρχει περίπτωση να βρεις έτοιμο κάποιο από αυτά, το οποίο κάνει τα πράγματα λιγότερο πολύπλοκα... πχ μπορείς να φτιάξεις ένα list object και απλά να περάσεις το reference του (αυτό ισχύει για το 90%) των γλωσσών προγραμματισμού... με αυτό έχεις το κεφάλι σου ήσυχο όσων αφορά την διαχείριση της μνήμης και σου παρέχει ένα σωρό ευκολίες στην επεξεργασία και την μετατροπή των δεδομένων μέσα στον πίνακα, αλλά χάνεις σε ταχύτητα...

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

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

Important Information

Ο ιστότοπος theLab.gr χρησιμοποιεί cookies για να διασφαλίσει την καλύτερη εμπειρία σας κατά την περιήγηση. Μπορείτε να προσαρμόσετε τις ρυθμίσεις των cookies σας , διαφορετικά θα υποθέσουμε ότι είστε εντάξει για να συνεχίσετε.