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

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

Δημοσ.

Φτιαχνω 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!!! Γιατι?

Δημοσ.

Γιατί το a είναι int.

 

 

Αυτό που σου γυρνάει η sizeof είναι το πλήθος των bytes του τύπου της μεταβλητής της οποίας ζητάς το μέγεθος (και μάλιστα στο γυρνάει σε 16 bit αριθμό).

Δημοσ.

Το sizeof σου επιστρέφει το μέγεθος της μεταβλητής και όχι του περιεχομένου της μεταβλητής.

 

Το "a" είναι "int" άρα καταλαμβάνει 4 byte μνήμης, για αυτό παίρνεις πάντα αποτέλεσμα 4.

 

Την λέξη την δίνεις με τον κώδικα που παραθέτεις ή έχεις άλλο κώδικά για εισαγωγή λέξεων;

Δημοσ.

Με αυτον τον κωδικα. Νομιζω πως καταλαβα :) Δυσκολη η C :)

 

 

Μαμάτη η C και ακόμα πιο μαμάτος ο Preprocessor!!!!!!!

 

 

Templates, dispatch σε functions, virtual functions και ό,τι άλλο θες μπορείς να το κάνεις (με κάμποσες γραμμές κώδικα, αλλά μπορείς!). Και όχι μόνο μπορείς, αλλά έχεις Α Π Ο Λ Υ Τ Ο έλεγχο σε ό,τι γίνεται. Μέχρι τελευταίας σταγό.. ε.. τελευταίου bit εννοώ. :P

Δημοσ.

Μια χρήσιμη πληροφορία για όποιον πρωτο-ξεκινάει με την 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.

 

Τα ίδια ισχύουν και για οποιονδήποτε πίνακα.

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...