Δημοσιεύτηκε: 23 Μαρ 2012, 22:10
Στατικά ορισμένος σημαίνει πως κάνεις μια πρόβλεψη για το μέγιστο μήκος του, τον ορίζεις με αυτό το μήκος κι από εκεί και πέρα δεν μπορείς ούτε να το μικρύνεις ούτε να το μεγαλώσεις. Οπότε εννοούσες απλώς να τον ορίσεις με μήκος μεγαλύτερο της αρχικοποίησης, ώστε να μπορείς να γεμίσεις και τα υπόλοιπα στοιχεία του αργότερα. Σε αυτή την περίπτωση ναι, με το δικό μου παράδειγμα δεν μπορείς (βέβαια εσύ δημιουργείς έναν πίνακα μεγέθους 20 * 100 * sizeof(char) bytes, ανεξάρτητα από τον αν έχεις γεμισμένο όχι, ενώ εγώ δημιουργώ έναν πίνακα με μέγεθος 7 * sizeof(char *) + 26 * sizeof(char) bytes.
Αν θεωρήσουμε πως το sizeof(char) είναι 1 byte και το sizeof(char *) είναι 4 bytes, τότε εσύ δεσμεύεις 2000 bytes, κι εγώ 728
Το εναλλακτικό του στατικά ορισμένου πίνακα είναι ο δυναμικός πίνακας, που αρχικά τον ορίζεις ως απλό δείκτη και κατόπιν μπορείς και δεσμεύεις δυναμικά όση μνήμη χρειάζεσαι, όταν την χρειάζεσαι και μπορείς μάλιστα να την αυξομειώσεις όσο και όταν θέλεις.
Υπάρχει και μια ενδιάμεση κατάσταση, τα Variable Length Arrays (VLA) τα οποία όμως έχουν αρκετούς περιορισμούς (βέβαια σε ορισμένες περιπτώσεις είναι πολύ χρήσιμα).
Αν θεωρήσουμε πως το sizeof(char) είναι 1 byte και το sizeof(char *) είναι 4 bytes, τότε εσύ δεσμεύεις 2000 bytes, κι εγώ 728
Το εναλλακτικό του στατικά ορισμένου πίνακα είναι ο δυναμικός πίνακας, που αρχικά τον ορίζεις ως απλό δείκτη και κατόπιν μπορείς και δεσμεύεις δυναμικά όση μνήμη χρειάζεσαι, όταν την χρειάζεσαι και μπορείς μάλιστα να την αυξομειώσεις όσο και όταν θέλεις.
Υπάρχει και μια ενδιάμεση κατάσταση, τα Variable Length Arrays (VLA) τα οποία όμως έχουν αρκετούς περιορισμούς (βέβαια σε ορισμένες περιπτώσεις είναι πολύ χρήσιμα).