Μετάβαση στο περιεχόμενο

Η C είναι απλή/Πίνακες

Από Βικιβιβλία

Λοιπόν, κατευθείαν στο ψητό: Τι είναι οι πίνακες δεδομένων? Τι εννοείς "στατικοί"?

Πίνακας δεδομένων( array ) είναι μια συνήθης μορφή δομής δεδομένων που μας βοηθάει να οργανώνουμε τα δεδομένα μας. Όταν το χρησιμοποιούμε, έχουμε μόνο το όνομα του πίνακα και του δίνουμε τη θέση( index ) του στοιχείου που θέλουμε( πχ "array[index] = 1;" ). Μπορείτε να σκεφτείτε τους πίνακες ως:

Μονοδιάστατος:
[ ], [ ], [ ], [ ], [ ], [ ], [ ]
Δισδιάστατος:
[ [ ], [ ], [ ], [ ] ],
[ [ ], [ ], [ ], [ ] ],
[ [ ], [ ], [ ], [ ] ],
[ [ ], [ ], [ ], [ ] ]

Στατικοί είναι οι πίνακες που έχουν ένα σταθερό μέγεθος, μια σταθερή χωρητικότητα, καθ`όλη τη διάρκεια του προγράμματος. Σ`αυτούς θα αναφερθώ στο παρόν άρθρο.

Η δήλωση ενός Ν-διάστατου πίνακα γίνεται ως εξής:

τύπος_στοιχείων όνομα_πίνακα[διάσταση-Ν]...[διάσταση-2][διάσταση-1];

πχ αν θέλω έναν int πίνακα 3Χ5 θα κάνω:

int myArray[3][5];

τώρα, αν θέλω να δώσω αρχικές τιμές, θα κάνω:

int myArray[5] = { 1, 2, 3, 4, 5 };
int myArray2[3][5] = { { 1, 2, 3, 4, 5 }, { 6, 7, 8, 9, 10 }, { 11, 12, 13, 14, 15 } };

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

Όσο για τη χρήση σε κώδικα, να θυμάστε( πολύ σημαντικό ) ότι οι θέσεις ξεκινούν απ`το μηδέν, και όχι απ`το ένα, δηλαδή αν έχετε έναν πίνακα 20 στοιχείων το πρώτο θα ήταν το 0 και το τελευταίο θα ήταν το 19. Η C δεν παρέχει καμιά προστασία, και αν προσπαθήσετε να διαβάσετε ή να γράψετε σε μνήμη που δεν σας ανήκει, κανείς δε ξέρει τι μπορεί να συμβεί!

Ορίστε ένα απλό πρόγραμμα που πρώτα αποθηκεύει στον πίνακα του πολλαπλασιασμού από το 1 μέχρι και το 5 και μετά τον εκτυπώνει:

#include <stdio.h>

int main(void)
{
    int mult_table[5][5];
    int i, j;
   
    for (i = 0; i < 5; i++){
        for (j = 0; j < 5; j++){
            mult_table[i][j] = (i+1)*(j+1);
        }
    }
   
    for (i = 0; i < 5; i++){
        for (j = 0; j < 5; j++){
            printf("%d x %d = %d ", i+1, j+1, mult_table[i][j]);
        }
        printf("\n");
    }
   
    getchar();
   
    return 0;
}

Τέλος, να διευκρινίσω ότι σκέτο το όνομα του πίνακα θεωρείται από τη C σαν δείκτης προς το πρώτο στοιχείο του( θα αναλύσω τους δείκτες στο επόμενο άρθρο ).