Οι πίνακες καθιστούν δυνατή την αποθήκευση ενός συνόλου σχετικών δεδομένων στη γλώσσα C χωρίς να χρειάζεται να δημιουργηθούν πολλαπλές μεταβλητές. Κατά κανόνα, οι πίνακες είναι μονοδιάστατοι, αλλά μπορούν να επεκταθούν ώστε να περιλαμβάνουν οποιονδήποτε αριθμό διαστάσεων. Θα σας δείξουμε πώς να δημιουργείτε δισδιάστατους πίνακες στη γλώσσα C και πώς να τους χρησιμοποιείτε αποτελεσματικά.

Ποια είναι τα βασικά στοιχεία της δημιουργίας πινάκων στη γλώσσα C;

Για να μπορείτε να δημιουργήσετε και να χειριστείτε πίνακες 2D στη γλώσσα C, πρέπει να γνωρίζετε τα βασικά στοιχεία αυτής της δομής στη γλώσσα προγραμματισμού C.

Όπως και σε πολλές άλλες γλώσσες, οι πίνακες στη C είναι ένα μπλοκ μνήμης στο οποίο μπορούν να αποθηκευτούν πολλές τιμές του ίδιου τύπου δεδομένων. Αυτό επιτρέπει την αποθήκευση και τον συνδυασμό πολλών τιμών κάτω από ένα όνομα μεταβλητής. Το μέγεθος του πίνακα πρέπει να είναι γνωστό κατά τη διάρκεια της μεταγλώττισης και δεν μπορεί να αλλάξει μετά. Το παρακάτω κομμάτι κώδικα δείχνει πώς να δημιουργήσετε πίνακες στη C:

int numbers1[15];
// Optionally, the saved values can be specified when they are created:
int numbers2[5] = {1, 2, 3, 4, 5};
c

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

Ο πίνακας number2, από την άλλη πλευρά, αρχικοποιείται χειροκίνητα κατά τη δημιουργία του. Αυτή η προσέγγιση είναι χρονοβόρα για μεγαλύτερους πίνακες και ο κώδικας που προκύπτει είναι συχνά ακατανόητος. Επομένως, στις περισσότερες περιπτώσεις, δεν είναι η καλύτερη προσέγγιση. Συνήθως είναι καλύτερο να προσπαθήσετε να συμπληρώσετε τους πίνακές σας προγραμματικά. Μπορείτε να το κάνετε αυτό, για παράδειγμα, με έναν βρόχο for:

int numbers3[100];
for(int i = 0; i < 100; i++) {
numbers3[i] = i + 1;
}
// Creates an array containing the integers 1 to 100.
c
Tip

Ανάλογα με το λειτουργικό σύστημα που διαθέτετε, το πρότυπο C που χρησιμοποιείτε και το σημείο στο πρόγραμμα όπου έχετε δηλώσει μια μη αρχικοποιημένη μεταβλητή, η μεταβλητή αυτή ενδέχεται να περιέχει μια τυχαία τιμή. Αυτό ισχύει και για τα πεδία πίνακα. Για αυτόν τον λόγο, είναι προτιμότερο να μην προσπελάζετε πεδία που δεν έχετε αρχικοποιήσει ακόμη, ιδίως εάν η τιμή που είναι αποθηκευμένη σε αυτά ερμηνεύεται ως δείκτης.

Μόλις δημιουργηθεί ένας πίνακας, μπορείτε να χρησιμοποιήσετε τον δείκτη του για να αποκτήσετε πρόσβαση σε μεμονωμένες τιμές. Είναι σημαντικό να σημειωθεί ότι οι πίνακες ξεκινούν με τον δείκτη 0. Το παρακάτω παράδειγμα θα σας δείξει:

int numbers2[5] = {1, 2, 3, 4, 5};
numbers2[3] = numbers2[2];
printf("%d\n", numbers2[3]);
// Output: 3
c

Ένας πίνακας 2D μπορεί να υλοποιηθεί σε C δημιουργώντας έναν πίνακα στον οποίο κάθε πεδίο περιέχει έναν άλλο πίνακα. Μπορείτε να διαβάσετε περισσότερα για τους πίνακες 2D στην επόμενη ενότητα.

Πώς να δημιουργήσετε πίνακες 2D σε C

Οι δισδιάστατοι πίνακες στη γλώσσα C είναι στην πραγματικότητα μονοδιάστατοι πίνακες. Κάθε πεδίο περιέχει απλώς έναν άλλο πίνακα. Ένας δισδιάστατος πίνακας μπορεί να θεωρηθεί ως ένας πίνακας ή μια μήτρα τιμών. Οι δισδιάστατοι πίνακες μπορούν να δημιουργηθούν και να συμπληρωθούν με την ακόλουθη σύνταξη:

ints_two_dimensions[10][10];
ints_two_dimensions [0][1] = 0;
ints_two_dimensions [2][1] = 2;
ints_two_dimensions [9][4] = 36;
// etc.
c

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

floats_two_dimensions[2][6] = {
{0.1, 3.56, 6.346, 8.9, 45.345, 2.284},
{7.0, 1.12, 9.74, 0.0, 3.56, 4.4}
}
c

Η αρχή ενός πίνακα μέσα σε έναν άλλο πίνακα δεν περιορίζεται σε δύο διαστάσεις. Μπορείτε να χρησιμοποιήσετε αυτή τη μέθοδο για να δημιουργήσετε πίνακες με οποιονδήποτε αριθμό διαστάσεων.

int ints_four_dimensions[10][10][10][10];
c

Πώς μπορείτε να χρησιμοποιήσετε πίνακες 2D στη γλώσσα C

Επανάληψη σε έναν πίνακα 2D

Οι δισδιάστατοι πίνακες στη γλώσσα C (ή πολυδιάστατοι πίνακες) χρησιμοποιούνται συνήθως για τη δημιουργία πολυδιάστατων δομών δεδομένων. Στο παρακάτω παράδειγμα, ένας δισδιάστατος πίνακας γεμίζει εναλλάξ με μηδενικά και μονάδες για να αναπαραστήσει μια σκακιέρα:

#include <stdio.h>
#define ARRAY_LENGTH 8
int main() {
    int chessboard[8][8];
    for(int i = 0; i < ARRAY_LENGTH; i++) {
        for(int j = 0; j < ARRAY_LENGTH; j++) {
            chessboard[i][j] = (i + j) % 2;
            printf("%d", chessboard[i][j]);
        }
        printf("\n");
    }
    return 0;
}
/*
Output:
01010101
10101010
01010101
10101010
01010101
10101010
01010101
10101010
*/
c

Σειρές χαρακτήρων

Αν θέλετε να χρησιμοποιήσετε τις συστοιχίες με επιδεξιότητα, είναι σημαντικό να έχετε κατά νου ότι μια συστοιχία είναι απλώς ένας δείκτης προς μια θέση στη μνήμη και έτσι την αντιλαμβάνεται ο μεταγλωττιστής C. Ο δείκτης που καθορίζεται κατά τη γραφή ή την ανάγνωση μεμονωμένων πεδίων αντιπροσωπεύει τη μετατόπιση κατά μήκος της συστοιχίας σε σχέση με τη βασική διεύθυνση. Ας δούμε το ακόλουθο παράδειγμα για να κατανοήσουμε καλύτερα:

#include <stdio.h>
int main() {
int number2[5] = {1, 2, 3, 4, 5};
printf("%d\n", *number2);
// Output: 1
printf("%d\n", *(number2 + 2));
// Output: 3
}
c

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

#include <stdio.h>
int main() {
    char* sentences[3];
    sentences[0] = "Hello, this is the first sentence.\n";
    sentences[1] = "This is the second sentence.\n";
    sentences[2] = "And now there are three.\n";
    printf("Original sentences:\n\n");
    for(int i = 0; i < 3; i++) {
        printf("%s", sentences[i]);
    }
    printf("\nChanged sentences:\n\n");
    for(int i = 0; i < 3; i++) {
        int j = 0;
        while(sentences[i][j] != '\n') {
            if(sentences[i][j] >= 'a' && sentences[i][j] <= 'z') {
                printf("%c", sentences[i][j] - 0x20);
            } else {
                printf("%c", sentences[i][j]);
            }
            j++;
        }
        printf("\n");
    }
}
/*
Output:
Original sentences:
Hello, this is the first sentence.
This is the second sentence.
And now there are three.
Changed sentences:
HELLO, THIS IS THE FIRST SENTENCE.
THIS IS THE SECOND SENTENCE.
AND NOW THERE ARE THREE.
*/
c
Go to Main Menu