Δημοσιεύτηκε: 13 Ιούλ 2011, 22:18
από migf1
Η αφαίρεση βγάζει 1 αν ΔΕΝ κάνεις το cast! Με το cast βγάζει 108 (bytes) το οποίο μπορείς να διασταυρώσεις πως είναι σωστό, βάζοντας από κάτω άλλο ένα printf που θα χρησιμοποιεί τον τελεστή sizeof... printf("%d\n", sizeof(test) );

Η όλη ιστορία είναι να χρησιμοποιήσεις έναν δείκτη και με αριθμητική δεικτών να αφαιρέσεις την αρχική διεύθυνση του test από την τελική. Βάζεις λοιπόν το δείκτη στην αρχή του test, του προσθέτεις 1 για να βρεις το τέλος του test και υπολογίζεις τη διαφορά.

Επειδή όμως ο p είναι δηλωμένος τύπου struct test, η αφαίρεση σκέτη σου βγάζει 1, εννοώντας 1 struct test. Κάνουμε τον p cast σαν να ήταν δείκτης σε χαρακτήρες (αντί για δείκτης σε structs που είναι) για να μας επιστρέψει το αποτέλεσμα σε chars, που ισοδυναμούν με bytes (guaranteed από το στάνταρ της γλώσσας).