Ο Στέργιος Ξαναχτυπά [10 Μονάδες]
Ο Στέργιος κουράστηκε με τους μαθηματικούς γρίφους και αποφάσισε να ασχοληθεί με κώδικα συστημάτων. Ο μπαμπάς του—ο Μάκης—του έδωσε το ακόλουθο κομμάτι κώδικα:
#include <stdio.h>
int main(void) {
char *p1 = NULL;
char *p2 = NULL;
int n = 16;
while (n-- > 0) {
if (*p1++ != *p2++) {
printf("Not Equal\n");
}
}
printf("Equal\n");
return 0;
}
Τι θα κάνει το παραπάνω κομμάτι κώδικα; Θα τυπώσει Equal, Not Equal, δεν κάνει compile, θα έχει κάποιο runtime error ή δεν μπορούμε να γνωρίζουμε; Αιτιολογήστε την απάντησή σας. Μη σωστά αιτιολογημένες απαντήσεις δεν θα λάβουν βαθμολογία.
Ξεκινήστε από το ερώτημα αν ο κώδικας περνάει από τον compiler: είναι συντακτικά σωστός;
Μετά σκεφτείτε τι σημαίνει να διαβάσετε μέσω *p1 όταν ο p1 είναι NULL, τι λέει
το πρότυπο της C γι’ αυτό και τι συμβαίνει συνήθως στην πράξη. Αναρωτηθείτε επίσης αν ο
compiler (π.χ. με -O2) έχει δικαίωμα να υποθέσει κάτι για έναν κώδικα που θα ήταν
απροσδιόριστη συμπεριφορά.
Αριθμός στον οδηγό: Α11.22
(στο κεφάλαιο) ·
Μόνιμο αναγνωριστικό: exam-2026-jan-q6 ·
Σύνδεσμος: https://progintro.github.io/study/questions/exams/exam-2026-jan-q6.html ·
Markdown (GitHub)