eternalob Δημοσιεύτηκε Νοέμβριος 9, 2010 #1 Κοινοποίηση Δημοσιεύτηκε Νοέμβριος 9, 2010 πως γινεται να επιστρεψω ολοκληρο πινακα απο συναρτηση?? Link to comment Share on other sites More sharing options...
tonyspanos Νοέμβριος 9, 2010 #2 Κοινοποίηση Νοέμβριος 9, 2010 Η πιο μπακάλικη λύση είναι static ο πίνακας. Link to comment Share on other sites More sharing options...
Myralis Νοέμβριος 13, 2010 #3 Κοινοποίηση Νοέμβριος 13, 2010 Γλώσσα? Και μια που βλέπω Ηράκλειο, σχολή? Για να δυσκολεύεσαι μάλλον είναι C, για δοκίμασε την αστεία και δεν ξέρω αν είναι τόσο καλή λύση του να επιστρέφεις τον pointer της αρχής του πίνακα (ο πίνακας θα πρέπει να είναι global), αν δεν θέλεις μαιμουδιές, φτιάξε struct, και μετέφερε το πίσω. Βέβαια αν τον πίνακα τον στέλνεις από την μαιν στην συνάρτηση και πάλι πίσω στην μαιν τότε δεν χρειάζεται να είναι global και είσαι μια χαρά με τον ποιντερ νομίζω.. Link to comment Share on other sites More sharing options...
backgman Νοέμβριος 16, 2010 #4 Κοινοποίηση Νοέμβριος 16, 2010 Αν η γλώσσα που γράφεις υποστηρίζει dereference (Java, Pascal,...) τότε μπορείς να περάσεις ολόκληροτο πίνακα σαν όρισμα στη συνάρτηση και να τον επεξεργαστείς.Αν η γλώσσα δεν υποστηρίζει dereference (C, ...) τότε θα πρέπει να δουλέψεις με pointers για να μπορείςνα επεξεργαστείς τον πίνακα μέσα στη συνάρτηση. Αν ο πίνακας είναι global τότε μπορείς να τον δεις/επεξεργαστείς απο οποιαδήποτε συνάρτηση χωρίς να είναι όρισμα ή με χρήση pointer.Αν ο πίνακας είναι static τότε απο τη στιγμή της αρχικοποίησης δε μπορεί να αλλάξει τις τιμές του, απο οποιαδήποτεσυνάρτηση.Ψάξε να βρείς tutorials για το πως μπορείς να επεξεργάζεσαι πίνακες απο συναρτήσεις, για τη γλώσσα που θες. Link to comment Share on other sites More sharing options...
Jaco Νοέμβριος 23, 2010 #5 Κοινοποίηση Νοέμβριος 23, 2010 Στην 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 More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.