Δημοσιεύτηκε: 06 Σεπ 2011, 00:32
Πάλι τα περιπλέκεις 
Όλοι οι πίνακες έχουν συνεχόμενα τα στοιχεία τους στη μνήμη, εννοώ δεν είναι ιδιομορφία των strings αυτό. Επίσης, οι malloc() / calloc() / realloc() πάντα δεσμεύουν συνεχόμενο κομμάτι στη μνήμη.
Τα strings δεν έχουν καμία άλλη ιδιομορφία στη φιλοσοφία τους συγκριτικά με οποιονδήποτε άλλο πίνακα, οποιουδήποτε τύπου, πλην του ότι πρέπει να έχουν ένα μηδενικό χαρακτήρα για να σηματοδοτούν το τέλος του τρέχοντος μήκους τους (αν δεν τον έχουν τότε είναι απλοί πίνακες χαρακτήρων), και έχουν μια έξτρα ειδική σύνταξη αρχικοποίησης μέσα σε διπλά εισαγωγικά.
Σε όλα τα υπόλοιπα συμπεριφέρονται όπως όλοι οι πίνακες στη C. Αν θες να τα διαχειριστείς στατικά τα ορίζεις ως πίνακες, αλλιώς ως δείκτες που πρέπει να τους κάνεις calloc() και free().
Οι 2 τρόποι που σας είπα να κρατήσετε για τον ορισμό τους (ένας με σύνταξη πίνακα... στατική διαχείριση, κι ένας με δείκτες... δυναμική διαχείριση) είναι οι βέλτιστοι για να είστε καλυμμένοι από πιθανά μελλοντικά σφάλματα λόγω ελλιπούς ορισμού και από πιθανούς κινδύνους ασφάλειας.
Τα string-literals επίσης δεν διαφέρουν σε τίποτα από μια οποιαδήποτε άλλη σταθερά οποιουδήποτε τύπου. Όπως γράφεις...
και το διαχειρίζεσαι κατόπιν σαν να ήταν int, τον οποίον όμως δεν μπορείς να τον τροποποιήσεις (δεν μπορείς να πεις πιο κάτω στο πρόγραμμά σου: MAXVALUE = 200 ) έτσι γράφεις και...
και το διαχειρίζεσαι κατόπιν σαν ήταν string, το οποίο όμως δεν μπορείς να το τροποποιήσεις.
Όλοι οι πίνακες έχουν συνεχόμενα τα στοιχεία τους στη μνήμη, εννοώ δεν είναι ιδιομορφία των strings αυτό. Επίσης, οι malloc() / calloc() / realloc() πάντα δεσμεύουν συνεχόμενο κομμάτι στη μνήμη.
Τα strings δεν έχουν καμία άλλη ιδιομορφία στη φιλοσοφία τους συγκριτικά με οποιονδήποτε άλλο πίνακα, οποιουδήποτε τύπου, πλην του ότι πρέπει να έχουν ένα μηδενικό χαρακτήρα για να σηματοδοτούν το τέλος του τρέχοντος μήκους τους (αν δεν τον έχουν τότε είναι απλοί πίνακες χαρακτήρων), και έχουν μια έξτρα ειδική σύνταξη αρχικοποίησης μέσα σε διπλά εισαγωγικά.
Σε όλα τα υπόλοιπα συμπεριφέρονται όπως όλοι οι πίνακες στη C. Αν θες να τα διαχειριστείς στατικά τα ορίζεις ως πίνακες, αλλιώς ως δείκτες που πρέπει να τους κάνεις calloc() και free().
Οι 2 τρόποι που σας είπα να κρατήσετε για τον ορισμό τους (ένας με σύνταξη πίνακα... στατική διαχείριση, κι ένας με δείκτες... δυναμική διαχείριση) είναι οι βέλτιστοι για να είστε καλυμμένοι από πιθανά μελλοντικά σφάλματα λόγω ελλιπούς ορισμού και από πιθανούς κινδύνους ασφάλειας.
Τα string-literals επίσης δεν διαφέρουν σε τίποτα από μια οποιαδήποτε άλλη σταθερά οποιουδήποτε τύπου. Όπως γράφεις...
- Κώδικας: Επιλογή όλων
#define MAXVALUE 100
και το διαχειρίζεσαι κατόπιν σαν να ήταν int, τον οποίον όμως δεν μπορείς να τον τροποποιήσεις (δεν μπορείς να πεις πιο κάτω στο πρόγραμμά σου: MAXVALUE = 200 ) έτσι γράφεις και...
- Κώδικας: Επιλογή όλων
#define VOWELS "aeouyAEOUY"
και το διαχειρίζεσαι κατόπιν σαν ήταν string, το οποίο όμως δεν μπορείς να το τροποποιήσεις.