sk8harddiefast Δημοσ. 28 Οκτωβρίου 2011 Δημοσ. 28 Οκτωβρίου 2011 Φτιαχνω 1 προγραμματακι σε C οπου θα δινω κατι (αριθμος, γραμμα, λεξη) και μου δεινει ποσσα bytes πιανει στην μνημη και θα μου τα μετατρεπει και σε bits Το προβλημα ειναι οτι για αρχη εγραψα αυτο: > #include <stdio.h> main () { int a; printf ("Give an integer:"); scanf ("%d", &a); printf ("%d\n", sizeof a); } Τρεχει αλλα μου δεινει παντα το αποτελεσμα 4 που ειναι σωστο οταν του δωσω integer αλλα οταν του δωσω 1 λεξη μου δεινει παλι αποτελεσμα 4!!! Γιατι?
Timonkaipumpa Δημοσ. 28 Οκτωβρίου 2011 Δημοσ. 28 Οκτωβρίου 2011 Γιατί το a είναι int. Αυτό που σου γυρνάει η sizeof είναι το πλήθος των bytes του τύπου της μεταβλητής της οποίας ζητάς το μέγεθος (και μάλιστα στο γυρνάει σε 16 bit αριθμό).
macabre_sunsets Δημοσ. 28 Οκτωβρίου 2011 Δημοσ. 28 Οκτωβρίου 2011 Το sizeof σου επιστρέφει το μέγεθος της μεταβλητής και όχι του περιεχομένου της μεταβλητής. Το "a" είναι "int" άρα καταλαμβάνει 4 byte μνήμης, για αυτό παίρνεις πάντα αποτέλεσμα 4. Την λέξη την δίνεις με τον κώδικα που παραθέτεις ή έχεις άλλο κώδικά για εισαγωγή λέξεων;
sk8harddiefast Δημοσ. 28 Οκτωβρίου 2011 Μέλος Δημοσ. 28 Οκτωβρίου 2011 Με αυτον τον κωδικα. Νομιζω πως καταλαβα Δυσκολη η C
Timonkaipumpa Δημοσ. 28 Οκτωβρίου 2011 Δημοσ. 28 Οκτωβρίου 2011 Με αυτον τον κωδικα. Νομιζω πως καταλαβα Δυσκολη η C Μαμάτη η C και ακόμα πιο μαμάτος ο Preprocessor!!!!!!! Templates, dispatch σε functions, virtual functions και ό,τι άλλο θες μπορείς να το κάνεις (με κάμποσες γραμμές κώδικα, αλλά μπορείς!). Και όχι μόνο μπορείς, αλλά έχεις Α Π Ο Λ Υ Τ Ο έλεγχο σε ό,τι γίνεται. Μέχρι τελευταίας σταγό.. ε.. τελευταίου bit εννοώ.
macabre_sunsets Δημοσ. 28 Οκτωβρίου 2011 Δημοσ. 28 Οκτωβρίου 2011 Με τον κώδικα που παραθέτεις δεν μπορείς να διαβάσεις μια λέξη (πίνακα χαρακτήρων).
migf1 Δημοσ. 29 Οκτωβρίου 2011 Δημοσ. 29 Οκτωβρίου 2011 Μια χρήσιμη πληροφορία για όποιον πρωτο-ξεκινάει με την sizeof είναι πως όταν εφαρμόζεται σε δείκτη επιστρέφει το μέγεθος του δείκτη και όχι των δεδομένων στα οποία δείχνει ο δείκτης (οι δείκτες καταλαμβάνουν ίδιο μέγεθος στη μνήμη, ανεξαρτήτως τύπου). Αντίθετα, όταν εφαρμόζεται σε στατικούς πίνακες, τότε επιστρέφει το συνολικό μέγεθος του πίνακα. Στα strings για παράδειγμα, αν έχουμε: > char str[50+1] = {'\0}; τότε μέσα στο scope του str το sizeof(s) δίνει το συνολικό του μέγεθος: 51 * sizeof(char). Αν όμως περαστεί σαν όρισμα σε μια συνάρτηση: > int foo( char s[] ) { ... printf( "%llu\n", (unsigned long long) sizeof(s) ); ... } τότε υπολογίζει απλά το μέγεθος του δείκτη στο 1ο στοιχείου του str. Τα ίδια ισχύουν και για οποιονδήποτε πίνακα.
sk8harddiefast Δημοσ. 29 Οκτωβρίου 2011 Μέλος Δημοσ. 29 Οκτωβρίου 2011 Ευχαριστω παιδια Αγορασα και βιβλιο και θα τα παρω απο το 0
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα