Die letzten 3 Beiträge |
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. |
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
|
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 |
|
|