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

Α11.22 · Ο Στέργιος Ξαναχτυπά

Εξέταση Ιανουαρίου 2026, Θέμα 6 · Δυσκολία ★☆☆ · trace · Κεφάλαια: 11, 13

Ο Στέργιος Ξαναχτυπά [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)