Οδηγός Μελέτης - Εισαγωγή στον Προγραμματισμό

Α11.17 · Πίνακες και αριθμητική δεικτών

Εργαστήριο 6, Άσκηση 3 · Δυσκολία ★★☆ · trace · Κεφάλαια: 11, 12

3.1 Ορίστε τη συνάρτηση void print_array(int *array, int n) που δέχεται σαν όρισμα έναν πίνακα ακεραίων και τη διάστασή του και εκτυπώνει τα περιεχόμενά του σε μία γραμμή χωρισμένα με στηλογνώμονα (tab).

3.2 Δημιουργήστε το πρόγραμμα pointers.c που δημιουργεί έναν πίνακα 8 θέσεων και κάνει πράξεις πάνω σε αυτόν, ακολουθώντας το παρακάτω τμήμα κώδικα:

01: int i, a[8], *pa;
02:
03: for (i=0; i<8; i++)
04:   a[i] = i*i;
05:
06: pa = &a[0];
07: a[6] = *(a+4);
08: *(pa+3) = a[5];
09: a[0] = *((pa++)+2);
10: *((++pa)+5) = a[1];
11: *(&a[5]-1) = *(--pa);

3.3 Εκτυπώστε τα περιεχόμενα του πίνακα, χρησιμοποιώντας τη συνάρτηση print_array() μετά από τα βήματα 04, 07, 08, 09, 10 και 11 για να παρακολουθήσετε την επίδραση των εντολών στον πίνακα.

Υπόδειξη

Πριν τρέξετε το πρόγραμμα, προβλέψτε με το χέρι τον πίνακα μετά από κάθε γραμμή και μετά συγκρίνετε. Το *(p+k) είναι το ίδιο με p[k]. Το δύσκολο σημείο είναι οι γραμμές 09–11: κρατήστε σημείωση σε ποιο στοιχείο δείχνει το pa κάθε στιγμή, και θυμηθείτε ότι το pa++ χρησιμοποιεί την παλιά τιμή ενώ το ++pa και το --pa τη νέα.

Αριθμός στον οδηγό: Α11.17 (στο κεφάλαιο) · Μόνιμο αναγνωριστικό: lab-lab06-pointers · Σύνδεσμος: https://progintro.github.io/study/questions/labs/lab-lab06-pointers.html · Markdown (GitHub)