2010-07-08 17 views
14

Was ist die Hauptfunktion von sizeof (Ich bin neu in C++). Zum BeispielWas macht sizeof?

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

Was sizeof (k) oder sizeof (int) und sizeof (char) bedeuten?

+0

Sie vermissen ein 'in Ihrem char. – Konrad

+8

@Tyler McHenry Timing ist für mich bei 0,08 Sekunden wenig daneben. – DumbCoder

+8

@davit: Wenn Sie eine Programmiersprache lernen, sollten Sie wirklich versuchen, ein anständiges Einführungsbuch über die Sprache zu lesen, um die Grundlagen zu bekommen, nicht nur Test, Fehler, Ratespiel und endlose Fragen zu SO. –

Antwort

49

sizeof(x) gibt die Speichermenge (in Byte) zurück, die die Variable oder den Typ x belegt. Es hat nichts mit dem Wert der Variablen zu tun.

Zum Beispiel, wenn Sie ein Array von einem beliebigen Typ T haben, dann ist der Abstand zwischen Elementen dieses Arrays genau sizeof(T).

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

Wenn auf einer Variable verwendet, es zu verwenden es von der Art dieser Variablen entspricht:

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

In der Regel-of-Daumen, ist es am besten, die Variablennamen zu verwenden, in denen möglich, nur für den Fall ändert sich die Art:

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. 

Wenn auf benutzerdefinierte Typen verwendet, sizeof noch die Menge an Speicher zurück durch Instanzen dieses Typs verwendet wird, aber es ist erwähnenswert, dass dies nicht notwendig gleich der Summe seiner Mitglieder.

struct Foo { int a; char b; }; 

Während sizeof(int) + sizeof(char) ist in der Regel 5, auf vielen Maschinen sizeof(Foo)8 sein kann, weil der Compiler so die Struktur pad out muss, dass es auf 4-Byte-Grenzen liegt. Dies ist nicht immer der Fall, und es ist durchaus möglich, dass auf Ihrem Computer sizeof(Foo) wird 5, aber Sie können nicht davon abhängen.

+0

int bedeutet, dass wenn Variable t gegeben ist t = 100 als sizeof (t) = 1? –

+0

, aber es zeigt mir 4 warum –

+0

'sizeof' hat nichts mit dem * Wert * der Variablen zu tun. Es hat mit dem Typ zu tun.Es besagt, dass auf Ihrem System alle Variablen vom Typ "int" 4 Byte Speicher benötigen. –

7

zu Peter Alexander Antwort hinzu: sizeof die Größe eines Wertes oder Typen in Vielfachen der Größe eines für char --- char definiert ist als die kleinste Speichereinheit adressierbar (von C oder C++) ergibt eine gegebene Architektur (und mindestens in C++ mindestens 8 Bit gemäß dem Standard). Dies ist im Allgemeinen mit "Bytes" (kleinste adressierbare Einheit für eine gegebene Architektur) gemeint, aber es tut nie weh zu klären, und es gibt gelegentlich Fragen über die Variabilität von sizeof (char), die natürlich immer 1 ist.

+0

Ein Byte ist nicht unbedingt die "kleinste adressierbare Einheit für eine gegebene Architektur". Bei einigen CDC-Cyber-Computern ist die kleinste adressierbare Einheit ein 16-Bit-Wort (Adresse 0 ist 16 Bit, Adresse 1 ist eine eindeutige 16 Bit) und sie beziehen sich auf die zwei Hälften als Bytes. –

+0

@James: Richtig: mein Punkt war, dass "Byte" ein inhärent mehrdeutiger Begriff ist, und egal wie du es definierst, jemand wird es irgendwo anders benutzen. Interessant an den CDCs. –

+0

Die meisten Leute werden zustimmen, dass ein Byte 8 Bits ist, und während es früher etwas Verwirrung gab, ist es heutzutage standardisiert: IEC 80000-13. Im Gegensatz dazu wird die kleinste adressierbare Einheit in einer Maschine oft als Wort bezeichnet und ist maschinenabhängig. Es gibt 16-, 32-, 64-Bit-Architekturen, aber auch in diesen Kontexten ist ein Byte immer noch 8 Bit. – Zane