Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite

Informatiker Board » Themengebiete » Theoretische Informatik » Sizeof Rätsel » Hallo Gast [Anmelden|Registrieren]
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen
Zum Ende der Seite springen Sizeof Rätsel
Beiträge zu diesem Thema Autor Datum
 Sizeof Rätsel Musti 06.03.2009 22:44
 RE: Sizeof Rätsel Musti 06.03.2009 22:51
 RE: Sizeof Rätsel David_pb 02.06.2009 17:29

Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
Musti
Grünschnabel


Dabei seit: 06.03.2009
Beiträge: 2

Sizeof Rätsel Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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
06.03.2009 22:44 Musti ist offline E-Mail an Musti senden Beiträge von Musti suchen Nehmen Sie Musti in Ihre Freundesliste auf
Musti
Grünschnabel


Dabei seit: 06.03.2009
Beiträge: 2

RE: Sizeof Rätsel Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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
06.03.2009 22:51 Musti ist offline E-Mail an Musti senden Beiträge von Musti suchen Nehmen Sie Musti in Ihre Freundesliste auf
David_pb
Mitglied


Dabei seit: 01.06.2007
Beiträge: 44

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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.

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von David_pb: 02.06.2009 17:29.

02.06.2009 17:29 David_pb ist offline E-Mail an David_pb senden Beiträge von David_pb suchen Nehmen Sie David_pb in Ihre Freundesliste auf
Baumstruktur | Brettstruktur
Gehe zu:
Informatiker Board » Themengebiete » Theoretische Informatik » Sizeof Rätsel