TweakPC

Zurück   Computer Hardware Forum - TweakPC > Games und Software > Programmiersprachen

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 01.07.2008, 14:58   #1 (permalink)
Overclocker
 
Benutzerbild von MasterMito
 

Registriert seit: 28.03.2006
Beiträge: 234

MasterMito befindet sich auf einem aufstrebenden Ast

Frage [C] So ne Sache mit nem void Pointer

Salut,

ich brüte hier vor nem Problem mit void-Pointern. Morgen ist Klausur und entweder ist der Prof der Honk (sehr wahrscheinlich) oder ich.

Wir haben ein char Feld auf das ein void-Pointer zeigt. Bsp:

Code:
short int a[2] = {1,2};
void * vptr;
vptr = a;
Ausserdem kommt noch ein
Code:
char * cpointer
dazu dem die Adresse vom vptr zugewiesen wird.

Code:
short int a[2] = {1,2};
void * vptr;
vptr = a;
cpointer = vptr;
Gefragt ist die Ausgabe von:
1. sizeof(a) = %d; (das sind 4 Byte, das sollte klar sein)
2. sizeof(a[0]) = %d (das sind 2 Byte, immer noch alles bestens)
3. sizeof(cpointer) = %d (da gehts los, wie groß soll der denn sein, 4???)
4. *cpointer = %d (omg... wat will der Spack)
5. *(cpointer+1) = %d (der abschluss)

Prof hat keine Ahnung, faselt immer was von Little Endian, wobei mir da etwas der Zusammenhang fehlt.. 1-5 steht in nem tollen printf.

Need Help...
PS: google haben wir auch schon gefragt
MasterMito ist offline   Mit Zitat antworten
Alt 01.07.2008, 22:28   #2 (permalink)
Extrem Tweaker
 
Benutzerbild von Crystallion
 

Registriert seit: 14.07.2004
Beiträge: 2.062

Crystallion ist ein LichtblickCrystallion ist ein LichtblickCrystallion ist ein LichtblickCrystallion ist ein LichtblickCrystallion ist ein Lichtblick

Standard AW: [C] So ne Sache mit nem void Pointer

Zitat:
Zitat von MasterMito Beitrag anzeigen
Gefragt ist die Ausgabe von:
1. sizeof(a) = %d; (das sind 4 Byte, das sollte klar sein)
Richtig, das sind 4 Byte. Wenn Dir das klar ist, müsste Dir aber auch 3. klar sein.

Zitat:
Zitat von MasterMito Beitrag anzeigen
2. sizeof(a[0]) = %d (das sind 2 Byte, immer noch alles bestens)
Stimmt auch, ein short int ist 16bit groß.

Zitat:
Zitat von MasterMito Beitrag anzeigen
3. sizeof(cpointer) = %d (da gehts los, wie groß soll der denn sein, 4???)
Die gleiche Logik wie in 1.: cpointer ist vom Typ char*, also ein Pointer. Pointer sind in 32bit-Umgebungen normalerweise genau so groß, also 4 Byte.

Zitat:
Zitat von MasterMito Beitrag anzeigen
4. *cpointer = %d (omg... wat will der Spack)
Das ist knifflig. Was vor dem '=' steht, heißt folgendes: "Interpretiere den Wert an der Speicherstelle cpointer [=vptr=a] als char".

Das heißt, es geht um die ersten acht Bit (weil char) des short int mit dem Wert 1.

Der lautet binär 1000000000000000 (hier kommt Little Endian ins Spiel, das niederwertigste Bit wird als erstes gespeichert), die ersten acht Bits sind also 10000000. So steht es im Speicher des Rechners.

In der gebräuchlichen Darstellung würde man das als Big Endian schreiben, nämlich 00000001. Interpretiert wird es in beiden Fällen einfach als eine 1, in dem Fall also als der Character mit der Nummer 1. Laut Wikipedia ist das ein Steuerzeichen ("SOH").

Als Zeichen hat das keine Darstellung, der %d-Modifikator im printf gibt das aber einfach als "1" aus.

Zitat:
Zitat von MasterMito Beitrag anzeigen
5. *(cpointer+1) = %d (der abschluss)
Hier wird cpointer zuerst um 1 inkrementiert. Da es ein char-Pointer ist, wird der Zeiger dadurch um acht Bit weitergeschoben - also auf die hinteren acht Bits des short ints '1' im Speicher, die da lauten 00000000.

Dann wird der verschobene Pointer dereferenziert und als char mit der Nummer 0 interpretiert. Das Zeichen hat keine Darstellung als ASCII-Zeichen, aber printf mit %d gibt es als 0 aus.


Hoffe das hilft Dir weiter. Wenn was unklar ist versuch ich's gern noch besser zu erklären.
Crystallion ist offline   Mit Zitat antworten
2 Benutzer bedanken sich für den Beitrag:
Exit (02.07.2008), MasterMito (02.07.2008)
Alt 02.07.2008, 15:08   #3 (permalink)
Overclocker
 
Benutzerbild von MasterMito
 

Registriert seit: 28.03.2006
Beiträge: 234

MasterMito befindet sich auf einem aufstrebenden Ast

Standard AW: [C] So ne Sache mit nem void Pointer

Alles bestens...Dickes merci... jetzt ist es klarer. Heute Klausur geschrieben wo das drin kam... natürlich gewusst
MasterMito ist offline   Mit Zitat antworten
Antwort

Stichworte
pointer, sache, void


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist aus.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[News] ASUS: Die Sache mit dem Spaltmaß TweakPC Newsbot News 8 03.03.2011 10:34
Die Sache mit der Grafikkarten-Leistungsaufnahme Seebaer Grafikkarten und Displays allgemein 20 26.03.2009 12:29
[News] Die Sache mit der Akkulaufzeit TweakPC Newsbot News 0 13.09.2008 04:02
die Sache mit der Formatiererei........ bieml Linux bzw. Non-MS & Programme 3 06.01.2007 17:58
C: Arrays und Pointer EoN Programmiersprachen 2 04.02.2005 19:02


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:14 Uhr.






Powered by vBulletin® Version 3.8.10 (Deutsch)
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
SEO by vBSEO 3.5.2 ©2010, Crawlability, Inc.
Impressum, Datenschutz Copyright © 1999-2015 TweakPC, Alle Rechte vorbehalten, all rights reserved