2010-07-08 7 views
14

Quelle est la fonction principale de sizeof (je suis nouveau en C++). Par exempleQue fait sizeof?

int k=7; 
char t='Z'; 

Que sizeof (k) ou sizeof (int) et sizeof (char) signifie?

+0

Il vous manque un 'dans votre caractère. – Konrad

+8

@Tyler McHenry Le timing est un peu faux pour moi à 0,08 secondes. – DumbCoder

+8

@davit: si vous voulez apprendre un langage de programmation, vous devriez vraiment essayer de lire un livre d'introduction décent sur la langue pour obtenir les bases, pas seulement sur le procès, les erreurs, les devinettes et les questions sans fin. –

Répondre

49

sizeof(x) renvoie la quantité de mémoire (en octets) occupée par la variable ou le type x. Cela n'a rien à voir avec la valeur de la variable. Par exemple, si vous avez un tableau de type arbitraire T, la distance entre les éléments de ce tableau est exactement sizeof(T).

int a[10]; 
assert(&(a[0]) + sizeof(int) == &(a[1])); 

Lorsqu'il est utilisé sur une variable, il est équivalent à utiliser le type de cette variable:

T x; 
assert(sizeof(T) == sizeof(x)); 

En règle de pouce, il est préférable d'utiliser le nom de la variable où possibles, au cas où le type change:

int x; 
std::cout << "x uses " << sizeof(x) << " bytes." << std::endl 
// If x is changed to a char, then the statement doesn't need to be changed. 
// If we used sizeof(int) instead, we would need to change 2 lines of code 
// instead of one. 

Lorsqu'il est utilisé sur les types définis par l'utilisateur, sizeof retourne encore la quantité de mémoire utilisée par les instances de ce type, mais il est intéressant de souligner que cela ne nécessaire égal à la somme de ses membres.

struct Foo { int a; char b; }; 

Alors que sizeof(int) + sizeof(char) est généralement 5, sur de nombreuses machines, sizeof(Foo) peut être 8 parce que le compilateur doit pad out la structure de sorte qu'il se trouve sur 4 limites d'octets. Ce n'est pas toujours le cas, et il est tout à fait possible que sur votre machine sizeof(Foo) soit 5, mais vous ne pouvez pas en dépendre. Sizeof() renvoie la taille de l'argument qui lui est passé.

+0

int signifie que si la variable t est donnée t = 100 que sizeof (t) = 1? –

+0

mais il me montre 4 pourquoi –

+0

'sizeof' n'a rien à voir avec la * valeur * de la variable. Cela a à voir avec le type.Il vous indique que sur votre système, toutes les variables de type 'int' nécessitent 4 octets de stockage. –

7

Pour ajouter à la réponse de Peter Alexander: sizeof cède la taille d'une valeur ou d'un type multiple de la taille d'un char --- char étant définie comme la plus petite unité de mémoire adressable (par C ou C++) pour une architecture donnée (et, en C++ au moins, d'au moins 8 bits selon la norme). C'est ce qu'on entend généralement par "bytes" (la plus petite unité adressable pour une architecture donnée) mais cela ne fait jamais de mal de clarifier, et il y a parfois des questions sur la variabilité de sizeof (char), qui est bien sûr toujours 1.

+0

Un octet n'est pas nécessairement la "plus petite unité adressable pour une architecture donnée". Sur certains ordinateurs Cyber ​​CDC, la plus petite unité adressable est un mot de 16 bits (l'adresse 0 correspond à 16 bits, l'adresse 1 correspond à 16 bits distincts) et ils désignent les deux moitiés comme des octets. –

+0

@James: Droit: mon point était que "byte" est un terme intrinsèquement ambigu, et peu importe comment vous le définissez, quelqu'un quelque part l'utilisera différemment. Intéressant sur les CDC. –

+0

La plupart des gens seront d'accord qu'un octet est 8 bits, et alors qu'il y avait une certaine confusion, il est standardisé de nos jours: IEC 80000-13. En revanche, la plus petite unité adressable dans une machine est souvent appelée un mot, et elle dépend de la machine. Il existe des architectures 16, 32, 64 bits, mais même dans ces contextes, un octet sera toujours de 8 bits. – Zane