Sizeof Rätsel

Neue Frage »

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 } ;

Zitat:
union { int ci[5] ; int cii ; double cd ; } c ;


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
 
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 danksmile
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.
 
Neue Frage »
Antworten »


Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »