Προς το περιεχόμενο

Τι θα εκτυπώσει;


wazomania

Προτεινόμενες αναρτήσεις

Δημοσ.

Έστω SIZE μια καθολική σταθερά 100 και Α ένας πίνακας μεγέθους SIZE στον οποίο υπάρχουν αποθηκευμένα n στοιχειά από αριστερά προς τα δεξιά. Αν ο πίνακας δεν έχει αρχικοποιηθεί και στις n πρώτες θέσεις του υπάρχουν οι αριθμοί 1 έως n σε αύξουσα σειρά, τότε τι θα εκτυπώσει η ακόλουθη εντολή

 

for(i=0; i<SIZE; i++)

printf("%d, " A);

 

με προβληματίζει που δεν έχει , μετά τα "..."

Δημοσ.

σε αυτήν την μορφή θα απαντούσες ότι υπάρχει constraint violation σε επίπεδο semantics, και ο compiler είναι υποχρεωμένος να διαγνώσει τουλάχιστον ένα μήνυμα πίσω στον χρηστη. Αν υποθέσεις ότι το λάθος δεν έγινε επίτηδες, δεν είναι ξεκάθαρο αν εννοούσε

>
printf("%d,", A[i]);

η

>
printf("%d",A[i]);

και έτσι δεν χρειάζεται καν να απαντήσεις την ερώτηση, απλός κανε παράπονα στον καθηγητή σου.

Δημοσ.

Οι θέσεις του πίνακα που δεν έχουν αρχικοποιηθεί (μετά τη n-1) περιέχουν απροσδιόριστες τιμές. Άρα, ακόμη κι αν θεωρηθεί ότι η εντολή εντός του βρόχου δεν είναι σκοπίμως λανθασμένη συντακτικά και έπρεπε να δοθεί ως εξής:

 

>printf("%d, ", A[i]);

 

...το output δε μπορεί να είναι κάτι διαφορετικό από το παρακάτω:

 

>1, 2, ..., n, [τυχαίος_αριθμός_1], [τυχαίος_αριθμός_2], ..., [τυχαίος_αριθμός_100-n]

Δημοσ.

Γενικό είναι. Στην ISO C, η πρόσβαση σε μεταβλητές που δεν έχουν αρχικοποιηθεί οδηγεί σε απροσδιόριστη συμπεριφορά. Στην περίπτωση ενός στατικού array, η συμπεριφορά αυτή εκδηλώνεται ως τυχαίες τιμές που παίρνουμε κατά την ανάγνωση. Σύμφωνα με την εκφώνηση όμως, στις n πρώτες θέσεις του πίνακα έχουν δοθεί τιμές. Άρα, οι επόμενες είναι που έχουν το «πρόβλημα».

 

Στην πράξη, πρόγραμμα που θα προκύψει από τον παραπάνω κώδικα εκτελείται κανονικά (κάποια IDEs μπορεί να προειδοποιήσουν ότι επιχειρείται πρόσβαση σε θέσεις μνήμης που δεν έχουν αρχικοποιηθεί). Απλά, το output είναι προβλέψιμο μόνο μέχρι τη n-οστή θέση του πίνακα.

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...