Sizeof Rätsel |
06.03.2009, 22:44 | Auf diesen Beitrag antworten » | ||
Musti | Sizeof Rätsel Hallo es geht um folgendes Sizeof Rätsel: Welche Ausgabe erzeugt das folgende C-Programm? Nehmen Sie hierzu an, dass eine double-Variable 8 Bytes, eine int-Variable 4 Bytes, eine char-Variable 1 Byte und eine Zeiger-Variable 4 Bytes belegt unddass kein ”Verschnitt“ (durch Auff¨ullen auf Vielfache der Wortgr¨oße, z.B. 4 Bytes) auftritt. #include <stdio.h> int foo(int a, int b) { printf("%d\n", a); if (a < b) return a; return foo(a-b, b); } int main( void ) { char a[] = "keine Panik!" ; char *pa ; char **ppa ; double b[ 3 ] = { 42.0, 42.1, 42.2 } ;
struct { int di[6] ; int dii ; double dd ; } d ; printf( "sizeof( a ) = %d\n", sizeof( a ) ) ; printf( "sizeof( pa ) = %d\n", sizeof( pa ) ) ; printf( "sizeof( ppa ) = %d\n", sizeof( ppa ) ) ; printf( "sizeof( b ) = %d\n", sizeof( b ) ) ; printf( "sizeof( c ) = %d\n", sizeof( c ) ) ; printf( "sizeof( d ) = %d\n", sizeof( d ) ) ; pa = a ; printf( "%c\n", *pa ) ; printf( "%c\n", *(pa + 2) ) ; ppa = &pa ; printf( "%c\n", **ppa ) ; printf( "%c\n", *(*ppa + 2) ) ; foo( 7, 3 ) ; return 0 ; } Es geht mir dabei um das zitierte: Ich kriege da raus: c=20 Der Compiler allerdings sagt mir c=24 Wer hat nun recht? Bei union wird doch jeweils die Bytes vom größten Typen genommen oder nicht. Da das int Feld mit 20 Byte am größten ist müsste c=20 stimmen. Danke |
||
|
|||
06.03.2009, 22:51 | Auf diesen Beitrag antworten » | ||
Musti | RE: Sizeof Rätsel Wäre super wenn mir die Frage jemand bis spätesten Sonntag beantworten könnte, da ich am Montag die Klausur schreibe. Vielen vielen dank |
||
02.06.2009, 17:29 | Auf diesen Beitrag antworten » | ||
David_pb | Sind zwar schon einige Sonntage her aber: Dein Compiler füllt das Union mit Padding Bytes auf, sodass die Größe ein Vielfaches von (in diesem Fall) 4 wird. |
|
Verwandte Themen
Die Beliebtesten » |
|
Die Größten » |
|
Die Neuesten » |
|