Che cosa fa sizeof do?

Qual è la funzione principale di sizeof (I am new to C ++). Per esempio

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

Cosa significano sizeof (k) o sizeof (int) e sizeof (char) ?

sizeof(x) restituisce la quantità di memoria (in byte) che occupa la variabile o il tipo x . Non ha nulla a che fare con il valore della variabile.

Ad esempio, se si dispone di una matrice di un tipo T arbitrario, la distanza tra gli elementi di quell’array è esattamente sizeof(T) .

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

Se utilizzato su una variabile, equivale a utilizzarlo sul tipo di tale variabile:

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

Come regola generale, è preferibile utilizzare il nome della variabile laddove ansible, nel caso in cui il tipo cambi:

 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. 

Quando viene utilizzato su tipi definiti dall'utente, sizeof restituisce ancora la quantità di memoria utilizzata dalle istanze di quel tipo, ma vale la pena sottolineare che ciò non è necessario uguale alla sum dei suoi membri.

 struct Foo { int a; char b; }; 

Mentre sizeof(int) + sizeof(char) è in genere 5 , su molte macchine, sizeof(Foo) può essere 8 perché il compilatore deve riempire la struttura in modo che si trovi su 4 byte. Questo non è sempre il caso, ed è del tutto ansible che sul tuo computer sizeof(Foo) sarà 5, ma non puoi dipenderlo.

Per aggiungere alla risposta di Peter Alexander: sizeof restituisce la dimensione di un valore o tipo in multipli della dimensione di un char char essendo definita come la più piccola unità di memoria indirizzabile (da C o C ++) per una determinata architettura (e, almeno in C ++, almeno 8 bit in base allo standard). Questo è ciò che generalmente si intende per “byte” (la più piccola unità indirizzabile per una data architettura), ma non fa mai male a chiarire, e ci sono occasionalmente domande sulla variabilità di sizeof (char) , che è ovviamente sempre 1 .

sizeof () restituisce la dimensione dell’argomento passato ad esso. sizeof () cpp reference